王佳豪
2021-03-19 011efb45dd8929c8d6833ef6c726dd9081bc1537
1.0.3
全局-发货通知相关功能
8个文件已添加
7个文件已修改
1549 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OutStockController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OutStockMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OutStockService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OutStockServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/VersionUtils.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/erp/ErpService.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/erp/entity/OutStockBill.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/erp/entity/OutStockBillEntry.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/erp/task/ErpScheduler.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OutStockMapper.xml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pakStore/outStock.js 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layuiadmin/modules/tableMerge.js 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/index.html 440 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pakStore/outStock.html 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
version/version/wjh.sql 289 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OutStockController.java
New file
@@ -0,0 +1,30 @@
package com.zy.asrs.controller;
import com.core.annotations.ManagerAuth;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.zy.asrs.service.OutStockService;
import com.zy.common.service.erp.entity.OutStockBillEntry;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class OutStockController extends BaseController {
    @Autowired
    private OutStockService outStockService;
    @RequestMapping(value = "/outStock/query/list")
    @ManagerAuth
    public R outStockQueryList(@RequestParam(defaultValue = "1")Integer curr,
                          @RequestParam(defaultValue = "10")Integer limit,
                          @RequestParam Map<String, Object> param){
        return R.ok(outStockService.queryOutStock(toPage(curr, limit, param, OutStockBillEntry.class)));
    }
}
src/main/java/com/zy/asrs/mapper/OutStockMapper.java
New file
@@ -0,0 +1,17 @@
package com.zy.asrs.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.common.service.erp.entity.OutStockBillEntry;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Mapper
@Repository
public interface OutStockMapper extends BaseMapper<OutStockBillEntry> {
    List<OutStockBillEntry> queryOutStock(Map<String, Object> map);
    Integer queryOutStockCount(Map<String, Object> map);
}
src/main/java/com/zy/asrs/service/OutStockService.java
New file
@@ -0,0 +1,13 @@
package com.zy.asrs.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.zy.common.service.erp.entity.OutStockBillEntry;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
public interface OutStockService extends IService<OutStockBillEntry> {
    Page<OutStockBillEntry> queryOutStock(Page<OutStockBillEntry> page);
}
src/main/java/com/zy/asrs/service/impl/OutStockServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.asrs.mapper.OutStockMapper;
import com.zy.asrs.service.OutStockService;
import com.zy.common.service.erp.entity.OutStockBillEntry;
import org.springframework.stereotype.Service;
@Service("outStockService")
public class OutStockServiceImpl extends ServiceImpl<OutStockMapper, OutStockBillEntry> implements OutStockService{
    @Override
    public Page<OutStockBillEntry> queryOutStock(Page<OutStockBillEntry> page) {
        page.setRecords(baseMapper.queryOutStock(page.getCondition()));
        page.setTotal(baseMapper.queryOutStockCount(page.getCondition()));
        return page;
    }
}
src/main/java/com/zy/asrs/utils/VersionUtils.java
@@ -80,7 +80,7 @@
        matCode.setMatNo(item.getMnumber()); // 物料编号
        matCode.setMatName(item.getMname()); // 物料描述
        matCode.setStr2(item.getMmodel()); // 物料类别
        matCode.setStr2(item.getMtypename());
        matCode.setStr3(item.getMtypename()); // 规格型号
    }
    // excel ----------------------------------------------------------------------
src/main/java/com/zy/common/service/erp/ErpService.java
@@ -281,8 +281,147 @@
        return erpSqlServer.update(sql) > 0;
    }
    public boolean syncOutStock() {
        return erpSqlServer.update("MERGE INTO xtyasrs.dbo.OutStockBill AS a \n" +
                "USING (SELECT * FROM  xtyasrs_dual.dbo.OutStockBill c)\n" +
                "AS b\n" +
                " ON a.FInterID = b.FInterID\n" +
                "WHEN MATCHED THEN\n" +
                "UPDATE SET \n" +
                "FBrNo = b.FBrNo,\n" +
                "FInterID = b.FInterID,\n" +
                "FBillNo = b.FBillNo,\n" +
                "FTranType = b.FTranType,\n" +
                "FSalType = b.FSalType,\n" +
                "FCustID = b.FCustID,\n" +
                "FDate = b.FDate,\n" +
                "FStockID = b.FStockID,\n" +
                "FAdd = b.FAdd,\n" +
                "FNote = b.FNote,\n" +
                "FEmpID = b.FEmpID,\n" +
                "FCheckerID = b.FCheckerID,\n" +
                "FBillerID = b.FBillerID,\n" +
                "FManagerID = b.FManagerID,\n" +
                "FClosed = b.FClosed,\n" +
                "FInvoiceClosed = b.FInvoiceClosed,\n" +
                "FBClosed = b.FBClosed,\n" +
                "FDeptID = b.FDeptID,\n" +
                "FSettleID = b.FSettleID,\n" +
                "FTranStatus = b.FTranStatus,\n" +
                "FExchangeRate = b.FExchangeRate,\n" +
                "FCurrencyID = b.FCurrencyID,\n" +
                "FStatus = b.FStatus,\n" +
                "FCancellation = b.FCancellation,\n" +
                "FMultiCheckLevel1 = b.FMultiCheckLevel1,\n" +
                "FMultiCheckLevel2 = b.FMultiCheckLevel2,\n" +
                "FMultiCheckLevel3 = b.FMultiCheckLevel3,\n" +
                "FMultiCheckLevel4 = b.FMultiCheckLevel4,\n" +
                "FMultiCheckLevel5 = b.FMultiCheckLevel5,\n" +
                "FMultiCheckLevel6 = b.FMultiCheckLevel6,\n" +
                "FMultiCheckDate1 = b.FMultiCheckDate1,\n" +
                "FMultiCheckDate2 = b.FMultiCheckDate2,\n" +
                "FMultiCheckDate3 = b.FMultiCheckDate3,\n" +
                "FMultiCheckDate4 = b.FMultiCheckDate4,\n" +
                "FMultiCheckDate5 = b.FMultiCheckDate5,\n" +
                "FMultiCheckDate6 = b.FMultiCheckDate6,\n" +
                "FCurCheckLevel = b.FCurCheckLevel,\n" +
                "FRelateBrID = b.FRelateBrID,\n" +
                "FCheckDate = b.FCheckDate,\n" +
                "FExplanation = b.FExplanation,\n" +
                "FFetchAdd = b.FFetchAdd,\n" +
                "FSelTranType = b.FSelTranType,\n" +
                "FChildren = b.FChildren,\n" +
                "FBrID = b.FBrID,\n" +
                "FAreaPS = b.FAreaPS,\n" +
                "FPOOrdBillNo = b.FPOOrdBillNo,\n" +
                "FManageType = b.FManageType,\n" +
                "FPrintCount = b.FPrintCount,\n" +
                "Fflag_rw = b.Fflag_rw,\n" +
                "Fflag_finish = b.Fflag_finish,\n" +
                "FWeiOrder = b.FWeiOrder,\n" +
                "FWeiOpenID = b.FWeiOpenID,\n" +
                "FOrderBillNo = b.FOrderBillNo,\n" +
                "FWLNumber = b.FWLNumber,\n" +
                "FWLCompany = b.FWLCompany,\n" +
                "FReturnFundType = b.FReturnFundType\n" +
                "WHEN NOT MATCHED  THEN\n" +
                "\tINSERT (FBrNo, FInterID, FBillNo, FTranType, FSalType, FCustID, FDate, FStockID, FAdd, FNote, FEmpID, FCheckerID, FBillerID, FManagerID, FClosed, FInvoiceClosed, FBClosed, FDeptID, FSettleID, FTranStatus, FExchangeRate, FCurrencyID, FStatus, FCancellation, FMultiCheckLevel1, FMultiCheckLevel2, FMultiCheckLevel3, FMultiCheckLevel4, FMultiCheckLevel5, FMultiCheckLevel6, FMultiCheckDate1, FMultiCheckDate2, FMultiCheckDate3, FMultiCheckDate4, FMultiCheckDate5, FMultiCheckDate6, FCurCheckLevel, FRelateBrID, FCheckDate, FExplanation, FFetchAdd, FSelTranType, FChildren, FBrID, FAreaPS, FPOOrdBillNo, FManageType, FPrintCount, Fflag_rw, Fflag_finish, FWeiOrder, FWeiOpenID, FOrderBillNo, FWLNumber, FWLCompany, FReturnFundType) \n" +
                "\tVALUES (b.FBrNo, b.FInterID, b.FBillNo, FTranType, FSalType, FCustID, FDate, FStockID, FAdd, FNote, FEmpID, FCheckerID, FBillerID, FManagerID, FClosed, FInvoiceClosed, FBClosed, FDeptID, FSettleID, FTranStatus, FExchangeRate, FCurrencyID, FStatus, FCancellation, FMultiCheckLevel1, FMultiCheckLevel2, FMultiCheckLevel3, FMultiCheckLevel4, FMultiCheckLevel5, FMultiCheckLevel6, FMultiCheckDate1, FMultiCheckDate2, FMultiCheckDate3, FMultiCheckDate4, FMultiCheckDate5, FMultiCheckDate6, FCurCheckLevel, FRelateBrID, FCheckDate, FExplanation, FFetchAdd, FSelTranType, FChildren, FBrID, FAreaPS, FPOOrdBillNo, FManageType, FPrintCount, Fflag_rw, Fflag_finish, FWeiOrder, FWeiOpenID, FOrderBillNo, FWLNumber, FWLCompany, FReturnFundType);")> 0;
    }
    public boolean syncOutStockDetail() {
        return erpSqlServer.update("MERGE INTO xtyasrs.dbo.OutStockBillEntry AS a \n" +
                "USING (SELECT * FROM  xtyasrs_dual.dbo.OutStockBillEntry c)\n" +
                "AS b\n" +
                " ON (a.FInterID = b.FInterID and a.FEntryID = b.FEntryID)\n" +
                "WHEN MATCHED THEN\n" +
                "UPDATE SET\n" +
                "FBrNo = b.FBrNo,\n" +
                "FInterID = b.FInterID,\n" +
                "FEntryID = b.FEntryID,\n" +
                "FDetailID = b.FDetailID,\n" +
                "FItemID = b.FItemID,\n" +
                "FQty = b.FQty,\n" +
                "FCommitQty = b.FCommitQty,\n" +
                "FPrice = b.FPrice,\n" +
                "FAmount = b.FAmount,\n" +
                "FOrderInterID = b.FOrderInterID,\n" +
                "FDate = b.FDate,\n" +
                "FNote = b.FNote,\n" +
                "FInvoiceQty = b.FInvoiceQty,\n" +
                "FBCommitQty = b.FBCommitQty,\n" +
                "FUnitID = b.FUnitID,\n" +
                "FAuxBCommitQty = b.FAuxBCommitQty,\n" +
                "FAuxCommitQty = b.FAuxCommitQty,\n" +
                "FAuxInvoiceQty = b.FAuxInvoiceQty,\n" +
                "FAuxPrice = b.FAuxPrice,\n" +
                "FAuxQty = b.FAuxQty,\n" +
                "FSourceEntryID = b.FSourceEntryID,\n" +
                "FMapNumber = b.FMapNumber,\n" +
                "FMapName = b.FMapName,\n" +
                "FAuxPropID = b.FAuxPropID,\n" +
                "FBatchNo = b.FBatchNo,\n" +
                "FCheckDate = b.FCheckDate,\n" +
                "FExplanation = b.FExplanation,\n" +
                "FFetchAdd = b.FFetchAdd,\n" +
                "FFetchDate = b.FFetchDate,\n" +
                "FMultiCheckDate1 = b.FMultiCheckDate1,\n" +
                "FMultiCheckDate2 = b.FMultiCheckDate2,\n" +
                "FMultiCheckDate3 = b.FMultiCheckDate3,\n" +
                "FMultiCheckDate4 = b.FMultiCheckDate4,\n" +
                "FMultiCheckDate5 = b.FMultiCheckDate5,\n" +
                "FMultiCheckDate6 = b.FMultiCheckDate6,\n" +
                "FSecCoefficient = b.FSecCoefficient,\n" +
                "FSecQty = b.FSecQty,\n" +
                "FSecCommitQty = b.FSecCommitQty,\n" +
                "FSourceTranType = b.FSourceTranType,\n" +
                "FSourceInterId = b.FSourceInterId,\n" +
                "FSourceBillNo = b.FSourceBillNo,\n" +
                "FContractInterID = b.FContractInterID,\n" +
                "FContractEntryID = b.FContractEntryID,\n" +
                "FContractBillNo = b.FContractBillNo,\n" +
                "FOrderEntryID = b.FOrderEntryID,\n" +
                "FOrderBillNo = b.FOrderBillNo,\n" +
                "FStockID = b.FStockID,\n" +
                "FBackQty = b.FBackQty,\n" +
                "FAuxBackQty = b.FAuxBackQty,\n" +
                "FSecBackQty = b.FSecBackQty,\n" +
                "FStdAmount = b.FStdAmount,\n" +
                "FPlanMode = b.FPlanMode,\n" +
                "FMTONo = b.FMTONo,\n" +
                "FStockQtyOnlyForShow = b.FStockQtyOnlyForShow,\n" +
                "FComplexQty = b.FComplexQty,\n" +
                "Fmodel = b.Fmodel,\n" +
                "Fname = b.Fname,\n" +
                "Fnumber = b.Fnumber,\n" +
                "FBarCode = b.FBarCode,\n" +
                "FBTPLCommitQty = b.FBTPLCommitQty,\n" +
                "FTPLCommitQty = b.FTPLCommitQty,\n" +
                "fsecinvoiceqty = b.fsecinvoiceqty\n" +
                "WHEN NOT MATCHED  THEN\n" +
                "\tINSERT (FBrNo, FInterID, FEntryID, FDetailID, FItemID, FQty, FCommitQty, FPrice, FAmount, FOrderInterID, FDate, FNote, FInvoiceQty, FBCommitQty, FUnitID, FAuxBCommitQty, FAuxCommitQty, FAuxInvoiceQty, FAuxPrice, FAuxQty, FSourceEntryID, FMapNumber, FMapName, FAuxPropID, FBatchNo, FCheckDate, FExplanation, FFetchAdd, FFetchDate, FMultiCheckDate1, FMultiCheckDate2, FMultiCheckDate3, FMultiCheckDate4, FMultiCheckDate5, FMultiCheckDate6, FSecCoefficient, FSecQty, FSecCommitQty, FSourceTranType, FSourceInterId, FSourceBillNo, FContractInterID, FContractEntryID, FContractBillNo, FOrderEntryID, FOrderBillNo, FStockID, FBackQty, FAuxBackQty, FSecBackQty, FStdAmount, FPlanMode, FMTONo, FStockQtyOnlyForShow, FComplexQty, Fmodel, Fname, Fnumber, FBarCode, FBTPLCommitQty, FTPLCommitQty, fsecinvoiceqty) \n" +
                "\tVALUES (b.FBrNo, b.FInterID, b.FEntryID, b.FDetailID, b.FItemID, b.FQty, b.FCommitQty, b.FPrice, b.FAmount, b.FOrderInterID, b.FDate, b.FNote, b.FInvoiceQty, b.FBCommitQty, b.FUnitID, b.FAuxBCommitQty, b.FAuxCommitQty, b.FAuxInvoiceQty, b.FAuxPrice, b.FAuxQty, b.FSourceEntryID, b.FMapNumber, b.FMapName, b.FAuxPropID, b.FBatchNo, b.FCheckDate, b.FExplanation, b.FFetchAdd, b.FFetchDate, b.FMultiCheckDate1, b.FMultiCheckDate2, b.FMultiCheckDate3, b.FMultiCheckDate4, b.FMultiCheckDate5, b.FMultiCheckDate6, b.FSecCoefficient, b.FSecQty, b.FSecCommitQty, b.FSourceTranType, b.FSourceInterId, b.FSourceBillNo, b.FContractInterID, b.FContractEntryID, b.FContractBillNo, b.FOrderEntryID, b.FOrderBillNo, b.FStockID, b.FBackQty, b.FAuxBackQty, b.FSecBackQty, b.FStdAmount, b.FPlanMode, b.FMTONo, b.FStockQtyOnlyForShow, b.FComplexQty, b.Fmodel, b.Fname, b.Fnumber, b.FBarCode, b.FBTPLCommitQty, b.FTPLCommitQty, b.fsecinvoiceqty);")> 0;
    }
src/main/java/com/zy/common/service/erp/entity/OutStockBill.java
@@ -1,6 +1,9 @@
package com.zy.common.service.erp.entity;
import io.swagger.models.auth.In;
import lombok.Data;
import java.util.Date;
/**
 * 出库表头
@@ -8,4 +11,115 @@
 */
@Data
public class OutStockBill {
    private String FBrNo;
    /*通知单内码*/
    private Integer FInterID;
    /*单据编号*/
    private String FBillNo;
    /*单据类型*/
    private Integer FTranType;
    /*销售方式*/
    private Integer FSalType;
    /*购货单位*/
    private Integer FCustID;
    /*日期*/
    private Date FDate;
    /*收货仓库*/
    private Integer FStockID;
    /*地址*/
    private String FAdd;
    /*退料原因*/
    private String FNote;
    /*业务员*/
    private Integer FEmpID;
    /*审核人*/
    private Integer FCheckerID;
    /*制单*/
    private Integer FBillerID;
    /*主管*/
    private Integer FManagerID;
    private Integer FClosed;
    private Short FInvoiceClosed;
    private Short FBClosed;
    /*部门*/
    private Integer FDeptID;
    /*结算方式*/
    private Integer FSettleID;
    /*传输状态*/
    private Integer FTranStatus;
    /*汇率*/
    private Double FExchangeRate;
    /*币别*/
    private Integer FCurrencyID;
    /*状态*/
    private Short FStatus;
    /*作废*/
    private Long FCancellation;
    /*一审*/
    private Integer FMultiCheckLevel1;
    /*二审*/
    private Integer FMultiCheckLevel2;
    /*三审*/
    private Integer FMultiCheckLevel3;
    /*四审*/
    private Integer FMultiCheckLevel4;
    /*五审*/
    private Integer FMultiCheckLevel5;
    /*六审*/
    private Integer FMultiCheckLevel6;
    /*一级审核日期*/
    private Date FMultiCheckDate1;
    /*二级审核日期*/
    private Date FMultiCheckDate2;
    /*三级审核日期*/
    private Date FMultiCheckDate3;
    /*四级审核日期*/
    private Date FMultiCheckDate4;
    /*五级审核日期*/
    private Date FMultiCheckDate5;
    /*六级审核日期*/
    private Date FMultiCheckDate6;
    private Integer FCurCheckLevel;
    /*订货机构*/
    private Integer FRelateBrID;
    /*审核日期*/
    private Date FCheckDate;
    private String FExplanation;
    private String FFetchAdd;
    private Integer FSelTranType;
    private Integer FChildren;
    private Integer FBrID;
    private Integer FAreaPS;
    private String FPOOrdBillNo;
    private Integer FManageType;
    private Short FPrintCount;
    private Integer Fflag_rw;
    private Integer Fflag_finish;
    private String FWeiOrder;
    private String FWeiOpenID;
    private String FOrderBillNo;
    private String FWLNumber;
    private String FWLCompany;
    private String FReturnFundType;
}
src/main/java/com/zy/common/service/erp/entity/OutStockBillEntry.java
@@ -2,10 +2,141 @@
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * 出库表体
 * Created by vincent on 2020/11/27
 */
@Data
public class OutStockBillEntry {
    /*单据编号-OutStockBill表数据 */
    private String FBillNo;
    /*地址-OutStockBill表数据*/
    private String FAdd;
    private String FBrNo;
    /*通知单内码*/
    private Integer FInterID;
    /*分录号*/
    private Integer FEntryID;
    /*产品代码内码*/
    private Integer FItemID;
    /*基本单位数量*/
    private BigDecimal FQty;
    /*发货数量*/
    private BigDecimal FCommitQty;
    /*单价*/
    private BigDecimal FPrice;
    /*金额*/
    private BigDecimal FAmount;
    /*销售订单单号*/
    private Integer FOrderInterID;
    /*日期*/
    private Date FDate;
    /*备注*/
    private String FNote;
    /*开票数量*/
    private BigDecimal FInvoiceQty;
    /*退货数量*/
    private BigDecimal FBCommitQty;
    /*计量单位*/
    private BigDecimal FUnitID;
    /*辅助退货数量*/
    private BigDecimal FAuxBCommitQty;
    /*辅助发货数量*/
    private BigDecimal FAuxCommitQty;
    /*辅助开票数量*/
    private BigDecimal FAuxInvoiceQty;
    /*单价*/
    private BigDecimal FAuxPrice;
    /*数量*/
    private BigDecimal FAuxQty;
    /*源单行号*/
    private Integer FSourceEntryID;
    /*对应代码*/
    private String FMapNumber;
    /*对应名称*/
    private String FMapName;
    private Integer FAuxPropID;
    private String FBatchNo;
    private Date FCheckDate;
    private String FExplanation;
    private String FFetchAdd;
    private Date FFetchDate;
    private Date FMultiCheckDate1;
    private Date FMultiCheckDate2;
    private Date FMultiCheckDate3;
    private Date FMultiCheckDate4;
    private Date FMultiCheckDate5;
    private Date FMultiCheckDate6;
    private BigDecimal FSecCoefficient;
    private BigDecimal FSecQty;
    private BigDecimal FSecCommitQty;
    private Integer FSourceTranType;
    private Integer FSourceInterId;
    private String FSourceBillNo;
    private Integer FContractInterID;
    private Integer FContractEntryID;
    private String FContractBillNo;
    private Integer FOrderEntryID;
    private String FOrderBillNo;
    private Integer FStockID;
    private BigDecimal FBackQty;
    private BigDecimal FAuxBackQty;
    private BigDecimal FSecBackQty;
    private BigDecimal FStdAmount;
    private Integer FPlanMode;
    private String FMTONo;
    private Integer FDetailID;
    private BigDecimal FStockQtyOnlyForShow;
    private String FComplexQty;
    private String Fmodel;
    private String Fname;
    private String Fnumber;
    private String FBarCode;
    private String FBTPLCommitQty;
    private String FTPLCommitQty;
    private String fsecinvoiceqty;
}
src/main/java/com/zy/common/service/erp/task/ErpScheduler.java
@@ -187,6 +187,31 @@
        }
    }
    /**
     * 成品出库-发货通知单表头
     */
    @Scheduled(cron = "0/30 * * * * ? ")
    public void syncOutStock(){
        boolean result = erpService.syncOutStock();
        if (result) {
//            System.out.format("%s\33[%d;%dm%s%n", "", 32, 3, "==========OutStockBill表同步成功==========");
        } else {
            System.out.format("%s\33[%d;%dm%s%n", "", 31, 3, "==========OutStockBill表同步失败==========");
        }
    }
    /**
     * 成品出库-发货通知单表体
     */
    @Scheduled(cron = "0/30 * * * * ? ")
    public void syncOutStockDetail(){
        boolean result = erpService.syncOutStockDetail();
        if (result) {
//            System.out.format("%s\33[%d;%dm%s%n", "", 32, 3, "==========OutStockBillEntry表同步成功==========");
        } else {
            System.out.format("%s\33[%d;%dm%s%n", "", 31, 3, "==========OutStockBillEntry表同步失败==========");
        }
    }
    /**
     * 原材料出库
src/main/resources/mapper/OutStockMapper.xml
New file
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zy.asrs.mapper.OutStockMapper">
    <!-- 映射结果 -->
    <resultMap id="OutStockResultMap" type="com.zy.common.service.erp.entity.OutStockBillEntry">
        <result column="FBrNo" property="FBrNo"/>
        <result column="FInterID" property="FInterID"/>
        <result column="FEntryID" property="FEntryID"/>
        <result column="FOrderInterID" property="FOrderInterID"/>
        <result column="FAuxQty" property="FAuxQty"/>
        <result column="FCommitQty" property="FCommitQty"/>
        <result column="FAuxPrice" property="FAuxPrice"/>
        <result column="FDate" property="FDate"/>
        <result column="FNote" property="FNote"/>
        <result column="FBillNo" property="FBillNo"/>
        <result column="FAdd" property="FAdd"/>
    </resultMap>
    <sql id="stockOutCondition">
        <if test="FBillNo!=null and FBillNo!='' ">
            and b.FBillNo like '%' + #{FBillNo} + '%'
        </if>
    </sql>
    <select id="queryOutStock" resultMap="OutStockResultMap">
        select * from
        (
        select ROW_NUMBER() over (order by a.FInterID,a.FEntryID) as row,a.FBrNo,a.FInterID,a.FEntryID,
        a.FOrderInterID,a.FAuxQty,a.FCommitQty,a.FAuxPrice,a.FDate,a.FNote, b.FBillNo, b.FAdd
        from OutStockBillEntry a left join OutStockBill b on a.FInterID = b.FInterID
        where 1=1
        <include refid="stockOutCondition"></include>
        ) t where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize})
    </select>
    <select id="queryOutStockCount" parameterType="java.util.Map" resultType="java.lang.Integer">
        select
        count(1)
        from OutStockBillEntry a
        left join OutStockBill b on a.FInterID = b.FInterID
        where 1=1
    </select>
</mapper>
src/main/webapp/static/js/pakStore/outStock.js
New file
@@ -0,0 +1,125 @@
var pageCurr;
function getCol() {
    var cols = [];
    cols.push(
        {field: 'fbillNo', merge: true, align: 'center', title: '单据编号'}
        , {field: 'fadd', align: 'center', title: '地址'}
        , {field: 'fentryID', align: 'center', title: '分录号'}
        , {field: 'forderInterID', align: 'center', title: '销售订单单号'}
        , {field: 'fauxQty', align: 'center', title: '数量'}
        , {field: 'fcommitQty', align: 'center', title: '发货数量'}
        , {field: 'fauxPrice', align: 'center', title: '单价'}
        , {field: 'fdate', align: 'center', title: '日期'}
        , {field: 'fnote', align: 'center', title: '备注'}
        , {fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width: 80}
    );
    return cols;
}
layui.use(['table', 'laydate', 'form', 'upload'], function () {
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
    var layDate = layui.laydate;
    var form = layui.form;
    var upload = layui.upload;
    var tableMerge = layui.tableMerge
    // 数据渲染
    tableIns = table.render({
        elem: '#salesOrder',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/outStock/query/list',
        page: true,
        limit: 16,
        limits: [16, 50, 100, 200, 500],
        even: true,
        toolbar: '#toolbar',
        cellMinWidth: 50,
        cols: [getCol()],
        request: {
            pageName: 'curr',
            pageSize: 'limit'
        },
        parseData: function (res) {
            return {
                'code': res.code,
                'msg': res.msg,
                'count': res.data.total,
                'data': res.data.records
            }
        },
        response: {
            statusCode: 200
        },
        done: function(res, curr, count) {
            if (res.code === 403) {
                top.location.href = baseUrl+"/";
            }
            pageCurr=curr;
            tableMerge.render(this)
        }
    });
    // 搜索栏重置事件
    form.on('submit(reset)', function (data) {
        pageCurr = 1;
        clearFormVal($('#search-box'));
        tableReload(false);
    });
    // 搜索栏搜索事件
    form.on('submit(search)', function (data) {
        pageCurr = 1;
        tableReload(false);
    });
    // 时间选择器
    layDate.render({
        elem: '.layui-laydate-range'
        , type: 'datetime'
        , range: true
    });
});
/* 表格数据重载 */
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
        },
        done: function (res, curr, count) {
            if (res.code === 403) {
                top.location.href = baseUrl + "/";
            }
            pageCurr = curr;
            if (res.data.length === 0 && count !== 0) {
                tableIns.reload({
                    where: searchData,
                    page: {
                        curr: pageCurr - 1
                    }
                });
                pageCurr -= 1;
            }
            limit(child);
            // 当前分页数据存储
            locNormalList = res.data;
        }
    });
}
/* 监听回车事件 */
$('body').keydown(function () {
    if (event.keyCode === 13) {
        $("#search").click();
    }
});
src/main/webapp/static/layuiadmin/modules/tableMerge.js
New file
@@ -0,0 +1,75 @@
/**
 * Created by YujieYang.
 * @name:  子表格扩展
 * @author: 杨玉杰
 * @version 1.0
 */
layui.define(['table'], function (exports) {
    var $ = layui.jquery;
    // 封装方法
    var mod = {
        /**
         * 渲染入口
         * @param myTable
         */
        render: function (myTable) {
            var tableBox = $(myTable.elem).next().children('.layui-table-box'),
                $main = $(tableBox.children('.layui-table-body').children('table').children('tbody').children('tr').toArray().reverse()),
                $fixLeft = $(tableBox.children('.layui-table-fixed-l').children('.layui-table-body').children('table').children('tbody').children('tr').toArray().reverse()),
                $fixRight = $(tableBox.children('.layui-table-fixed-r').children('.layui-table-body').children('table').children('tbody').children('tr').toArray().reverse()),
                cols = myTable.cols[0], mergeRecord = {};
            for (let i = 0; i < cols.length; i++) {
                var item3 = cols[i], field=item3.field;
                if (item3.merge) {
                    var mergeField = [field];
                    if (item3.merge !== true) {
                        if (typeof item3.merge == 'string') {
                            mergeField = [item3.merge]
                        } else {
                            mergeField = item3.merge
                        }
                    }
                    mergeRecord[i] = {mergeField: mergeField, rowspan:1}
                }
            }
            $main.each(function (i) {
                for (var item in mergeRecord) {
                    if (i==$main.length-1 || isMaster(i, item)) {
                        $(this).children('[data-key$="-'+item+'"]').attr('rowspan', mergeRecord[item].rowspan).css('position','static');
                        $fixLeft.eq(i).children('[data-key$="-'+item+'"]').attr('rowspan', mergeRecord[item].rowspan).css('position','static');
                        $fixRight.eq(i).children('[data-key$="-'+item+'"]').attr('rowspan', mergeRecord[item].rowspan).css('position','static');
                        mergeRecord[item].rowspan = 1;
                    } else {
                        $(this).children('[data-key$="-'+item+'"]').remove();
                        $fixLeft.eq(i).children('[data-key$="-'+item+'"]').remove();
                        $fixRight.eq(i).children('[data-key$="-'+item+'"]').remove();
                        mergeRecord[item].rowspan +=1;
                    }
                }
            })
            function isMaster (index, item) {
                var mergeField = mergeRecord[item].mergeField;
                var dataLength = layui.table.cache[myTable.id].length;
                for (var i=0; i<mergeField.length; i++) {
                    if (layui.table.cache[myTable.id][dataLength-2-index][mergeField[i]]
                        !== layui.table.cache[myTable.id][dataLength-1-index][mergeField[i]]) {
                        return true;
                    }
                }
                return false;
            }
        }
    };
    // 输出
    exports('tableMerge', mod);
});
src/main/webapp/views/index.html
@@ -1,240 +1,248 @@
<!DOCTYPE html>
<html>
<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.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
  <link rel="icon" type="image/x-icon" href="../static/image/log.png" />
  <link rel="stylesheet" href="../static/layuiadmin/layui/css/layui.css" media="all">
  <link rel="stylesheet" href="../static/layuiadmin/style/admin.css" media="all">
  <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
  <script type="text/javascript" src="../static/js/common.js"></script>
  <script type="text/javascript" src="../static/layuiadmin/layui/layui.js"></script>
  <style>
    .layui-layout-admin .layui-footer {
      box-sizing: border-box;
      background-color: #fff;
      z-index: 999;
      height: 30px;
      padding: 0;
      font-size: 13px;
      margin: 0;
      line-height: 30px;
    }
    .layui-layout-admin .layui-footer a {
      color: #3573ab;
      font-weight: bold
    }
    <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.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <link rel="icon" type="image/x-icon" href="../static/image/log.png"/>
    <link rel="stylesheet" href="../static/layuiadmin/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../static/layuiadmin/style/admin.css" media="all">
    <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="../static/js/common.js"></script>
    <script type="text/javascript" src="../static/layuiadmin/layui/layui.js"></script>
    <style>
        .layui-layout-admin .layui-footer {
            box-sizing: border-box;
            background-color: #fff;
            z-index: 999;
            height: 30px;
            padding: 0;
            font-size: 13px;
            margin: 0;
            line-height: 30px;
        }
    .layui-layout-admin .layui-logo {
      letter-spacing: 2px;
      font-size: 22px;
      height: 110px;
      padding: 20px 10px;
      font-weight: bolder;
      /*color: #2c7dc2;*/
      color: #f3f3f3;
      text-align: center;
      line-height: 40px;
    }
    .layadmin-side-shrink .layui-layout-admin .layui-logo {
      background-image: none;
    }
    .layui-side-menu .layui-nav {
      margin-top: 110px;
    }
  </style>
        .layui-layout-admin .layui-footer a {
            color: #3573ab;
            font-weight: bold
        }
        .layui-layout-admin .layui-logo {
            letter-spacing: 2px;
            font-size: 22px;
            height: 110px;
            padding: 20px 10px;
            font-weight: bolder;
            /*color: #2c7dc2;*/
            color: #f3f3f3;
            text-align: center;
            line-height: 40px;
        }
        .layadmin-side-shrink .layui-layout-admin .layui-logo {
            background-image: none;
        }
        .layui-side-menu .layui-nav {
            margin-top: 110px;
        }
    </style>
</head>
<body class="layui-layout-body">
  <div id="LAY_app">
<div id="LAY_app">
    <div class="layui-layout layui-layout-admin">
      <div class="layui-header">
        <!-- 头部区域 -->
        <ul id="cool-header-left" class="layui-nav layui-layout-left">
          <li class="layui-nav-item layadmin-flexible" lay-unselect>
            <a href="javascript:;" layadmin-event="flexible" title="侧边伸缩">
              <i class="layui-icon layui-icon-shrink-right" id="LAY_app_flexible"></i>
            </a>
          </li>
          <!--<li class="layui-nav-item layui-hide-xs" lay-unselect>-->
            <!--<a lay-href="report/viewLocMap.html?resourceId=10286" title="Map">-->
              <!--<i class="layui-icon layui-icon-website"></i>-->
            <!--</a>-->
          <!--</li>-->
          <li class="layui-nav-item" lay-unselect>
            <a href="javascript:;" layadmin-event="refresh" title="刷新">
              <i class="layui-icon layui-icon-refresh-3"></i>
            </a>
          </li>
          <!--<li class="layui-nav-item layui-hide-xs" lay-unselect>-->
            <!--<input type="text" placeholder="搜索..." autocomplete="off" class="layui-input layui-input-search" layadmin-event="serach" lay-action="template/search.html?keywords=">-->
          <!--</li>-->
        </ul>
        <ul id="cool-header-right" class="layui-nav layui-layout-right" lay-filter="layadmin-layout-right">
          <li class="layui-nav-item layui-hide-xs" lay-unselect>
            <a href="javascript:;" layadmin-event="theme">
              <i class="layui-icon layui-icon-theme"></i>
            </a>
          </li>
          <li class="layui-nav-item layui-hide-xs" lay-unselect>
            <a id="activation-icon" href="javascript:;" layadmin-event="note">
              <i class="layui-icon layui-icon-note"></i>
            </a>
          </li>
          <li class="layui-nav-item layui-hide-xs" lay-unselect>
            <a href="javascript:;" layadmin-event="fullscreen">
              <i class="layui-icon layui-icon-screen-full"></i>
            </a>
          </li>
          <li class="layui-nav-item" lay-unselect>
            <a href="javascript:;">
              <cite id="person-username">管理员</cite>
            </a>
            <dl class="layui-nav-child">
              <dd><a lay-href="detail.html">基本资料</a></dd>
              <!--<dd><a lay-href="set/user/password.html">修改密码</a></dd>-->
              <hr>
              <dd style="text-align: center;"><a id="logout" href="/">退出</a></dd>
            </dl>
          </li>
        </ul>
      </div>
      <!-- 侧边菜单 -->
      <div class="layui-side layui-side-menu">
        <div class="layui-side-scroll">
          <div class="layui-logo" lay-href="home/console.html">
            <img src="../static/image/logo.png" style="display: inline-block; width: 90%;height: auto">
            <span style="margin-top: 0">中扬立库</span>
          </div>
        <div class="layui-header">
            <!-- 头部区域 -->
            <ul id="cool-header-left" class="layui-nav layui-layout-left">
                <li class="layui-nav-item layadmin-flexible" lay-unselect>
                    <a href="javascript:;" layadmin-event="flexible" title="侧边伸缩">
                        <i class="layui-icon layui-icon-shrink-right" id="LAY_app_flexible"></i>
                    </a>
                </li>
                <!--<li class="layui-nav-item layui-hide-xs" lay-unselect>-->
                <!--<a lay-href="report/viewLocMap.html?resourceId=10286" title="Map">-->
                <!--<i class="layui-icon layui-icon-website"></i>-->
                <!--</a>-->
                <!--</li>-->
                <li class="layui-nav-item" lay-unselect>
                    <a href="javascript:;" layadmin-event="refresh" title="刷新">
                        <i class="layui-icon layui-icon-refresh-3"></i>
                    </a>
                </li>
                <!--<li class="layui-nav-item layui-hide-xs" lay-unselect>-->
                <!--<input type="text" placeholder="搜索..." autocomplete="off" class="layui-input layui-input-search" layadmin-event="serach" lay-action="template/search.html?keywords=">-->
                <!--</li>-->
            </ul>
            <ul id="cool-header-right" class="layui-nav layui-layout-right" lay-filter="layadmin-layout-right">
          <ul class="layui-nav layui-nav-tree" lay-shrink="all" id="LAY-system-side-menu" lay-filter="layadmin-system-side-menu">
          </ul>
                <li class="layui-nav-item layui-hide-xs" lay-unselect>
                    <a href="javascript:;" layadmin-event="theme">
                        <i class="layui-icon layui-icon-theme"></i>
                    </a>
                </li>
                <li class="layui-nav-item layui-hide-xs" lay-unselect>
                    <a id="activation-icon" href="javascript:;" layadmin-event="note">
                        <i class="layui-icon layui-icon-note"></i>
                    </a>
                </li>
                <li class="layui-nav-item layui-hide-xs" lay-unselect>
                    <a href="javascript:;" layadmin-event="fullscreen">
                        <i class="layui-icon layui-icon-screen-full"></i>
                    </a>
                </li>
                <li class="layui-nav-item" lay-unselect>
                    <a href="javascript:;">
                        <cite id="person-username">管理员</cite>
                    </a>
                    <dl class="layui-nav-child">
                        <dd><a lay-href="detail.html">基本资料</a></dd>
                        <!--<dd><a lay-href="set/user/password.html">修改密码</a></dd>-->
                        <hr>
                        <dd style="text-align: center;"><a id="logout" href="/">退出</a></dd>
                    </dl>
                </li>
            </ul>
        </div>
      </div>
      <!-- 页面标签 -->
      <div class="layadmin-pagetabs" id="LAY_app_tabs">
        <div class="layui-icon layadmin-tabs-control layui-icon-prev" layadmin-event="leftPage"></div>
        <div class="layui-icon layadmin-tabs-control layui-icon-next" layadmin-event="rightPage"></div>
        <div class="layui-icon layadmin-tabs-control layui-icon-down">
          <ul class="layui-nav layadmin-tabs-select" lay-filter="layadmin-pagetabs-nav">
            <li class="layui-nav-item" lay-unselect>
              <a href="javascript:;"></a>
              <dl class="layui-nav-child layui-anim-fadein">
                <dd layadmin-event="closeThisTabs"><a href="javascript:;">关闭当前标签页</a></dd>
                <dd layadmin-event="closeOtherTabs"><a href="javascript:;">关闭其它标签页</a></dd>
                <dd layadmin-event="closeAllTabs"><a href="javascript:;">关闭全部标签页</a></dd>
              </dl>
            </li>
          </ul>
        </div>
        <div class="layui-tab" lay-unauto lay-allowClose="true" lay-filter="layadmin-layout-tabs">
          <ul class="layui-tab-title" id="LAY_app_tabsheader">
            <li lay-id="home/console.html" lay-attr="home/console.html" class="layui-this"><i class="layui-icon layui-icon-home"></i></li>
          </ul>
        </div>
      </div>
      <!-- 主体内容 -->
      <div class="layui-body" id="LAY_app_body">
        <div class="layadmin-tabsbody-item layui-show">
          <iframe src="home/console.html" frameborder="0" class="layadmin-iframe"></iframe>
        </div>
      </div>
        <!-- 侧边菜单 -->
        <div class="layui-side layui-side-menu">
            <div class="layui-side-scroll">
                <div class="layui-logo" lay-href="home/console.html">
                    <img src="../static/image/logo.png" style="display: inline-block; width: 90%;height: auto">
                    <span style="margin-top: 0">中扬立库</span>
                </div>
      <div class="layui-footer">
        Copyright © 2015 All Rights Reserved. <a href="http://www.zoneyung.com" target="_blank">浙江中扬立库技术有限公司</a>  保留所有权利
      </div>
      <!-- 辅助元素,一般用于移动设备下遮罩 -->
      <div class="layadmin-body-shade" layadmin-event="shade"></div>
                <ul class="layui-nav layui-nav-tree" lay-shrink="all" id="LAY-system-side-menu"
                    lay-filter="layadmin-system-side-menu">
                </ul>
            </div>
        </div>
        <!-- 页面标签 -->
        <div class="layadmin-pagetabs" id="LAY_app_tabs">
            <div class="layui-icon layadmin-tabs-control layui-icon-prev" layadmin-event="leftPage"></div>
            <div class="layui-icon layadmin-tabs-control layui-icon-next" layadmin-event="rightPage"></div>
            <div class="layui-icon layadmin-tabs-control layui-icon-down">
                <ul class="layui-nav layadmin-tabs-select" lay-filter="layadmin-pagetabs-nav">
                    <li class="layui-nav-item" lay-unselect>
                        <a href="javascript:;"></a>
                        <dl class="layui-nav-child layui-anim-fadein">
                            <dd layadmin-event="closeThisTabs"><a href="javascript:;">关闭当前标签页</a></dd>
                            <dd layadmin-event="closeOtherTabs"><a href="javascript:;">关闭其它标签页</a></dd>
                            <dd layadmin-event="closeAllTabs"><a href="javascript:;">关闭全部标签页</a></dd>
                        </dl>
                    </li>
                </ul>
            </div>
            <div class="layui-tab" lay-unauto lay-allowClose="true" lay-filter="layadmin-layout-tabs">
                <ul class="layui-tab-title" id="LAY_app_tabsheader">
                    <li lay-id="home/console.html" lay-attr="home/console.html" class="layui-this"><i
                            class="layui-icon layui-icon-home"></i></li>
                </ul>
            </div>
        </div>
        <!-- 主体内容 -->
        <div class="layui-body" id="LAY_app_body">
            <div class="layadmin-tabsbody-item layui-show">
                <iframe src="home/console.html" frameborder="0" class="layadmin-iframe"></iframe>
            </div>
        </div>
        <div class="layui-footer">
            Copyright © 2015 All Rights Reserved. <a href="http://www.zoneyung.com" target="_blank">浙江中扬立库技术有限公司</a>
            保留所有权利
        </div>
        <!-- 辅助元素,一般用于移动设备下遮罩 -->
        <div class="layadmin-body-shade" layadmin-event="shade"></div>
    </div>
  </div>
</div>
  <script>
  layui.config({
    base: '../static/layuiadmin/' //静态资源所在路径
  }).extend({
    index: 'lib/index' //主入口模块
  }).use(['index','element'], function () {
      var element = layui.element;
      var $ = layui.jquery;
<script>
    layui.config({
        base: '../static/layuiadmin/' //静态资源所在路径
    }).extend({
        index: 'lib/index', //主入口模块
        tableMerge: 'tableMerge',
    }).use(['index', 'element', 'tableMerge'], function () {
        var element = layui.element;
        var $ = layui.jquery;
      // 替换退出按钮变量
      var logout = document.getElementById('logout');
      var url = logout.getAttribute('href');
      logout.setAttribute('href', baseUrl + url);
        // 替换退出按钮变量
        var logout = document.getElementById('logout');
        var url = logout.getAttribute('href');
        logout.setAttribute('href', baseUrl + url);
      $('#person-username').text(localStorage.getItem('username'));
        $('#person-username').text(localStorage.getItem('username'));
      $(function () {
          if ("" === localStorage.getItem('token')){
              top.location.href = baseUrl+"/login";
          }
          // 激活码验证
          $.ajax({
            url: baseUrl+"/system/activation/auth",
            dataType:'json',
            method: 'GET',
            async: false,
            success: function (res) {
              if (res.code === 200) {
                $("#activation-icon").hide();
              } else {
                $("#activation-icon").click();
              }
        $(function () {
            if ("" === localStorage.getItem('token')) {
                top.location.href = baseUrl + "/login";
            }
          });
          getMenu()
          // 注销
          $(document).on('click','#logout',function () {
              localStorage.removeItem("token");
          });
      });
      // 加载菜单
      function getMenu() {
        $.ajax({
          url: baseUrl+ "/menu/auth",
          headers: {'token': localStorage.getItem('token')},
          method: 'POST',
          success: function (res) {
            if (res.code === 200){
              var menuHtml = "";
              if (res.data != null){
                for (var i = 0; i < res.data.length; i++) {
                  menuHtml += '<li data-name="' + res.data[i].menuCode +'" class="layui-nav-item">\n';
                  menuHtml += '<a href="javascript:;" lay-tips=' +res.data[i].menu+ ' lay-direction="2">\n';
                  menuHtml += '<i class="layui-icon '+ res.data[i].menuIcon +'"></i>\n';
                  menuHtml += ' <cite>' +res.data[i].menu+ '</cite>\n';
                  menuHtml += '</a>\n';
                  menuHtml += '<dl class="layui-nav-child">\n';
                  for (var j = 0; j < res.data[i].subMenu.length; j++) {
                    menuHtml += '<dd><a lay-href="' +res.data[i].subMenu[j].code+ '?resourceId='+ res.data[i].subMenu[j].id + '">' + res.data[i].subMenu[j].name + '</a></dd>\n';
                  }
                  menuHtml += '</dl>\n';
                  menuHtml += '</li>\n';
            // 激活码验证
            $.ajax({
                url: baseUrl + "/system/activation/auth",
                dataType: 'json',
                method: 'GET',
                async: false,
                success: function (res) {
                    if (res.code === 200) {
                        $("#activation-icon").hide();
                    } else {
                        $("#activation-icon").click();
                    }
                }
              }
              $('#LAY-system-side-menu').append(menuHtml);
              element.init();
            } else if (res.code === 403){
              top.location.href = baseUrl+"/login";
            }else {
              layer.alert(res.msg)
            }
          }
            });
            getMenu()
            // 注销
            $(document).on('click', '#logout', function () {
                localStorage.removeItem("token");
            });
        });
      }
  });
  </script>
        // 加载菜单
        function getMenu() {
            $.ajax({
                url: baseUrl + "/menu/auth",
                headers: {'token': localStorage.getItem('token')},
                method: 'POST',
                success: function (res) {
                    if (res.code === 200) {
                        var menuHtml = "";
                        if (res.data != null) {
                            for (var i = 0; i < res.data.length; i++) {
                                menuHtml += '<li data-name="' + res.data[i].menuCode + '" class="layui-nav-item">\n';
                                menuHtml += '<a href="javascript:;" lay-tips=' + res.data[i].menu + ' lay-direction="2">\n';
                                menuHtml += '<i class="layui-icon ' + res.data[i].menuIcon + '"></i>\n';
                                menuHtml += ' <cite>' + res.data[i].menu + '</cite>\n';
                                menuHtml += '</a>\n';
                                menuHtml += '<dl class="layui-nav-child">\n';
                                for (var j = 0; j < res.data[i].subMenu.length; j++) {
                                    menuHtml += '<dd><a lay-href="' + res.data[i].subMenu[j].code + '?resourceId=' + res.data[i].subMenu[j].id + '">' + res.data[i].subMenu[j].name + '</a></dd>\n';
                                }
                                menuHtml += '</dl>\n';
                                menuHtml += '</li>\n';
                            }
                        }
                        $('#LAY-system-side-menu').append(menuHtml);
                        element.init();
                    } else if (res.code === 403) {
                        top.location.href = baseUrl + "/login";
                    } else {
                        layer.alert(res.msg)
                    }
                }
            });
        }
    });
</script>
</body>
</html>
src/main/webapp/views/pakStore/outStock.html
New file
@@ -0,0 +1,85 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
    <link rel="stylesheet" href="../../static/css/common.css" media="all">
    <link rel="stylesheet" href="../../static/css/print.css" media="all">
</head>
<style>
    #search-box {
        padding: 30px 30px 10px 30px;
    }
    #search-box .layui-inline {
        margin-right: 5px;
    }
    #data-search-btn {
        margin-top: 10px;
    }
    #data-search-btn.layui-btn-container .layui-btn {
        margin-right: 20px;
    }
    .contain td {
        border: 1px solid #000;
        /*line-height: 46px;*/
    }
</style>
<body>
<div>
    <!-- 搜索栏 -->
    <div id="search-box" class="layui-form layui-card-header">
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="condition" placeholder="请输入" autocomplete="off">
            </div>
        </div>
        <!--&lt;!&ndash; 日期范围 &ndash;&gt;-->
        <!--<div class="layui-inline" style="width: 300px">-->
            <!--<div class="layui-input-inline">-->
                <!--<input class="layui-input layui-laydate-range" name="orderTime" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">-->
            <!--</div>-->
        <!--</div>-->
        <div id="data-search-btn" class="layui-btn-container layui-form-item">
            <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">搜索
            </button>
            <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">重置
            </button>
        </div>
    </div>
    <!-- 表格 -->
    <div class="layui-form">
        <table class="layui-hide" id="salesOrder" lay-filter="salesOrder"></table>
    </div>
</div>
<script type="text/html" id="operate">
    <button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="btnPrint">操作</button>
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></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/layuiadmin/modules/tableMerge.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/pakStore/outStock.js"></script>
</body>
</html>
version/version/wjh.sql
@@ -38,4 +38,291 @@
/* v1.0.3 2021.03.11 */
--表结构变更
alter table asr_loc_normal add id int identity(1,1)
alter table asr_loc_normal add id int identity(1,1)
/* v1.0.4 2021.03.17 */
USE [xtyasrs]
GO
/****** Object:  Table [dbo].[OutStockbill]    Script Date: 2021/3/17 10:18:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[OutStockbill](
    [FBrNo] [varchar](10) NOT NULL,
    [FInterID] [int] NOT NULL,
    [FBillNo] [nvarchar](255) NOT NULL,
    [FTranType] [smallint] NULL,
    [FSalType] [int] NULL,
    [FCustID] [int] NULL,
    [FDate] [datetime] NULL,
    [FStockID] [int] NULL,
    [FAdd] [char](255) NULL,
    [FNote] [char](255) NULL,
    [FEmpID] [int] NULL,
    [FCheckerID] [int] NULL,
    [FBillerID] [int] NULL,
    [FManagerID] [int] NULL,
    [FClosed] [int] NOT NULL,
    [FInvoiceClosed] [smallint] NULL,
    [FBClosed] [smallint] NOT NULL,
    [FDeptID] [int] NULL,
    [FSettleID] [int] NULL,
    [FTranStatus] [int] NOT NULL,
    [FExchangeRate] [float] NULL,
    [FCurrencyID] [int] NULL,
    [FStatus] [smallint] NOT NULL,
    [FCancellation] [bit] NOT NULL,
    [FMultiCheckLevel1] [int] NULL,
    [FMultiCheckLevel2] [int] NULL,
    [FMultiCheckLevel3] [int] NULL,
    [FMultiCheckLevel4] [int] NULL,
    [FMultiCheckLevel5] [int] NULL,
    [FMultiCheckLevel6] [int] NULL,
    [FMultiCheckDate1] [datetime] NULL,
    [FMultiCheckDate2] [datetime] NULL,
    [FMultiCheckDate3] [datetime] NULL,
    [FMultiCheckDate4] [datetime] NULL,
    [FMultiCheckDate5] [datetime] NULL,
    [FMultiCheckDate6] [datetime] NULL,
    [FCurCheckLevel] [int] NULL,
    [FRelateBrID] [int] NULL,
    [FCheckDate] [datetime] NULL,
    [FExplanation] [nvarchar](255) NOT NULL,
    [FFetchAdd] [nvarchar](255) NOT NULL,
    [FSelTranType] [int] NOT NULL,
    [FChildren] [int] NOT NULL,
    [FBrID] [int] NULL,
    [FAreaPS] [int] NOT NULL,
    [FPOOrdBillNo] [nvarchar](255) NULL,
    [FManageType] [int] NULL,
    [FPrintCount] [smallint] NULL,
    [Fflag_rw] [int] NULL,
    [Fflag_finish] [int] NULL
) ON [PRIMARY]
SET ANSI_PADDING OFF
ALTER TABLE [dbo].[OutStockbill] ADD [FWeiOrder] [varchar](255) NOT NULL
ALTER TABLE [dbo].[OutStockbill] ADD [FWeiOpenID] [nvarchar](255) NOT NULL
ALTER TABLE [dbo].[OutStockbill] ADD [FOrderBillNo] [nvarchar](255) NOT NULL
SET ANSI_PADDING ON
ALTER TABLE [dbo].[OutStockbill] ADD [FWLNumber] [varchar](255) NULL
ALTER TABLE [dbo].[OutStockbill] ADD [FWLCompany] [varchar](255) NULL
SET ANSI_PADDING OFF
ALTER TABLE [dbo].[OutStockbill] ADD [FReturnFundType] [varchar](255) NOT NULL
 CONSTRAINT [pk_OutStockbill_1__16] PRIMARY KEY CLUSTERED
(
    [FBrNo] ASC,
    [FInterID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[OutStockbillEntry]    Script Date: 2021/3/17 10:18:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[OutStockbillEntry](
    [FBrNo] [varchar](10) NOT NULL,
    [FInterID] [int] NOT NULL,
    [FEntryID] [int] NOT NULL,
    [FItemID] [int] NULL,
    [FQty] [decimal](28, 10) NOT NULL,
    [FCommitQty] [decimal](28, 10) NOT NULL,
    [FPrice] [decimal](28, 10) NOT NULL,
    [FAmount] [decimal](20, 2) NOT NULL,
    [FOrderInterID] [int] NOT NULL,
    [FDate] [datetime] NULL,
    [FNote] [varchar](1024) NULL,
    [FInvoiceQty] [decimal](28, 10) NOT NULL,
    [FBCommitQty] [decimal](28, 10) NOT NULL,
    [FUnitID] [int] NOT NULL,
    [FAuxBCommitQty] [decimal](28, 10) NOT NULL,
    [FAuxCommitQty] [decimal](28, 10) NOT NULL,
    [FAuxInvoiceQty] [decimal](28, 10) NOT NULL,
    [FAuxPrice] [decimal](28, 10) NOT NULL,
    [FAuxQty] [decimal](28, 10) NOT NULL,
    [FSourceEntryID] [int] NOT NULL,
    [FMapNumber] [varchar](80) NOT NULL,
    [FMapName] [nvarchar](256) NULL,
    [FAuxPropID] [int] NOT NULL,
    [FBatchNo] [nvarchar](255) NOT NULL,
    [FCheckDate] [datetime] NULL,
    [FExplanation] [nvarchar](255) NOT NULL,
    [FFetchAdd] [nvarchar](255) NOT NULL,
    [FFetchDate] [datetime] NULL,
    [FMultiCheckDate1] [datetime] NULL,
    [FMultiCheckDate2] [datetime] NULL,
    [FMultiCheckDate3] [datetime] NULL,
    [FMultiCheckDate4] [datetime] NULL,
    [FMultiCheckDate5] [datetime] NULL,
    [FMultiCheckDate6] [datetime] NULL,
    [FSecCoefficient] [decimal](28, 10) NOT NULL,
    [FSecQty] [decimal](28, 10) NOT NULL,
    [FSecCommitQty] [decimal](28, 10) NOT NULL,
    [FSourceTranType] [int] NOT NULL,
    [FSourceInterId] [int] NOT NULL,
    [FSourceBillNo] [nvarchar](255) NOT NULL,
    [FContractInterID] [int] NOT NULL,
    [FContractEntryID] [int] NOT NULL,
    [FContractBillNo] [nvarchar](255) NOT NULL,
    [FOrderEntryID] [int] NOT NULL,
    [FOrderBillNo] [nvarchar](255) NOT NULL,
    [FStockID] [int] NOT NULL,
    [FBackQty] [decimal](28, 10) NOT NULL,
    [FAuxBackQty] [decimal](28, 10) NOT NULL,
    [FSecBackQty] [decimal](28, 10) NOT NULL,
    [FStdAmount] [decimal](23, 10) NOT NULL,
    [FPlanMode] [int] NOT NULL,
    [FMTONo] [nvarchar](50) NOT NULL,
    [FDetailID] [int] NOT NULL,
    [FStockQtyOnlyForShow] [decimal](23, 10) NOT NULL,
    [FComplexQty] [varchar](255) NULL,
    [Fmodel] [varchar](80) NULL,
    [Fname] [varchar](80) NULL,
    [Fnumber] [varchar](80) NULL
) ON [PRIMARY]
SET ANSI_PADDING OFF
ALTER TABLE [dbo].[OutStockbillEntry] ADD [FBarCode] [varchar](100) NOT NULL
ALTER TABLE [dbo].[OutStockbillEntry] ADD [FBTPLCommitQty] [decimal](28, 10) NOT NULL
ALTER TABLE [dbo].[OutStockbillEntry] ADD [FTPLCommitQty] [decimal](28, 10) NOT NULL
ALTER TABLE [dbo].[OutStockbillEntry] ADD [fsecinvoiceqty] [decimal](23, 10) NULL
 CONSTRAINT [pk_OutStockbillEntry_1__16] PRIMARY KEY CLUSTERED
(
    [FBrNo] ASC,
    [FInterID] ASC,
    [FEntryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ((0)) FOR [FClosed]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ((0)) FOR [FInvoiceClosed]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ((0)) FOR [FBClosed]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ((-1)) FOR [FSettleID]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ((0)) FOR [FTranStatus]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ((0)) FOR [FStatus]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ((0)) FOR [FCancellation]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  CONSTRAINT [DF__OutStockbill__FConsig]  DEFAULT ((0)) FOR [FRelateBrID]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ('') FOR [FExplanation]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ('') FOR [FFetchAdd]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ((0)) FOR [FSelTranType]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ((0)) FOR [FChildren]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ((0)) FOR [FAreaPS]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ('') FOR [FWeiOrder]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ('') FOR [FWeiOpenID]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ('') FOR [FOrderBillNo]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ('') FOR [FWLNumber]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ('') FOR [FWLCompany]
GO
ALTER TABLE [dbo].[OutStockbill] ADD  DEFAULT ('') FOR [FReturnFundType]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FCommitQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FPrice]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FAmount]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  CONSTRAINT [DF_OutStockbillEntry_FOrderInterID]  DEFAULT ((0)) FOR [FOrderInterID]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FInvoiceQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FBCommitQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FUnitID]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FAuxBCommitQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FAuxCommitQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FAuxInvoiceQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FAuxPrice]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FAuxQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  CONSTRAINT [DF__SEOutStoc__FSour__558158D4]  DEFAULT ((0)) FOR [FSourceEntryID]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ('') FOR [FMapNumber]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  CONSTRAINT [DF__SEOutStoc__FMapN__5769A146]  DEFAULT ('') FOR [FMapName]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FAuxPropID]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ('') FOR [FBatchNo]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ('') FOR [FExplanation]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ('') FOR [FFetchAdd]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FSecCoefficient]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FSecQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FSecCommitQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FSourceTranType]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FSourceInterId]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ('') FOR [FSourceBillNo]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FContractInterID]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FContractEntryID]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ('') FOR [FContractBillNo]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FOrderEntryID]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ('') FOR [FOrderBillNo]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FStockID]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FBackQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FAuxBackQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FSecBackQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FStdAmount]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((14036)) FOR [FPlanMode]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ('') FOR [FMTONo]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ('0') FOR [FStockQtyOnlyForShow]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ('') FOR [FBarCode]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FBTPLCommitQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [FTPLCommitQty]
GO
ALTER TABLE [dbo].[OutStockbillEntry] ADD  DEFAULT ((0)) FOR [fsecinvoiceqty]
GO