王佳豪
2021-03-12 f2beaeeb5a1811dbc38b386d7a5b5d0f9c8c6f7c
1.0.3
pda新增平仓出库功能
1个文件已添加
10个文件已修改
476 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/LocNormalController.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocNormal.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocNormalMapper.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocNormalService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocNormalServiceImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/excel/locNomal/LocNormalExcel.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/BaseController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocNormalMapper.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pda/index.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pda/locNormalOut.html 316 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
version/version/wjh.sql 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocNormalController.java
@@ -10,6 +10,7 @@
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.sun.org.apache.bcel.internal.generic.NEW;
import com.zy.asrs.entity.LocNormal;
import com.zy.asrs.entity.param.LocNormalParam;
import com.zy.asrs.service.LocNormalService;
@@ -27,6 +28,7 @@
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -130,6 +132,21 @@
        return R.ok("成功导入" + listener.getTotal() + "条物料信息");
    }
    /* 平仓入库 */
    @RequestMapping(value = "/locNormal/in")
    @ManagerAuth(memo = "平仓入库")
    @Transactional
    public R locNormalIn(@RequestBody LocNormalParam param) {
        Long userId = getUserId();
        Date timeNow = new Date();
        for (Integer i = 0; i < param.getNormalList().size(); i++) {
            param.getNormalList().get(i).setAppeUser(userId);
            param.getNormalList().get(i).setAppeTime(timeNow);
        }
        locNormalService.locNormalIn(param.getNormalList());
        return R.ok();
    }
    /* pda入库 */
    @RequestMapping(value = "/locNormal/pda/in")
    @ManagerAuth(memo = "平仓管理pda入库")
@@ -145,18 +162,28 @@
        return R.ok();
    }
    /* 平仓入库 */
    @RequestMapping(value = "/locNormal/in")
    @ManagerAuth(memo = "平仓入库")
    /* pda出库查询 */
    @RequestMapping(value = "/locNormal/pda/out/query")
    @ManagerAuth(memo = "pda出库查询")
    @Transactional
    public R locNormalIn(@RequestBody LocNormalParam param) {
    public R locNormalPdaOutQuery(String matnr, String warehouse) {
        List<LocNormal> list = new ArrayList<>();
        list  = locNormalService.pdaLocNormalQuery(matnr, warehouse);
        return R.ok(list);
    }
    @RequestMapping(value = "/locNormal/pda/out")
    @ManagerAuth(memo = "pda出库")
    @Transactional
    public R locNormalPdaOut(@RequestBody LocNormalParam param) {
        Long userId = getUserId();
        Date timeNow = new Date();
        for (Integer i = 0; i < param.getNormalList().size(); i++) {
            param.getNormalList().get(i).setAppeUser(userId);
            param.getNormalList().get(i).setAppeTime(timeNow);
        List<LocNormal> list = param.getNormalList();
        for (Integer i = 0; i < list.size(); i++) {
            list.get(i).setModiUser(userId);
            list.get(i).setModiTime(timeNow);
        }
        locNormalService.locNormalIn(param.getNormalList());
        locNormalService.pdaLocNormalOut(list);
        return R.ok();
    }
}
src/main/java/com/zy/asrs/entity/LocNormal.java
@@ -13,6 +13,7 @@
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -21,6 +22,9 @@
public class LocNormal implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value= "自增ID")
    private Integer id;
    @ApiModelProperty(value= "物料")
    @TableId(value = "matnr", type = IdType.INPUT)
@@ -48,7 +52,7 @@
    private String brand;
    @ApiModelProperty(value= "数量")
    private Double anfme;
    private BigDecimal anfme;
    @ApiModelProperty(value= "单位")
    private String altme;
@@ -79,6 +83,9 @@
    @TableField("state")
    private String state;
    @TableField(exist = false)
    private BigDecimal anfmeOut;
    public String getModiUser$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.selectById(this.modiUser);
src/main/java/com/zy/asrs/mapper/LocNormalMapper.java
@@ -18,13 +18,19 @@
public interface LocNormalMapper extends BaseMapper<LocNormal> {
    List<LocNormal> getLocNormalData();
    public void updateLocNormal(@Param("matnr") String matnr,@Param("anfme") Double anfme, @Param("modiUser") Long modiUser, @Param("modiTime") Date modiTime);
    public void updateLocNormal(@Param("matnr") String matnr,@Param("anfme") BigDecimal anfme, @Param("modiUser") Long modiUser, @Param("modiTime") Date modiTime);
    public void outLocNormal(@Param("matnr") String matnr, @Param("modiUser") Long modiUser, @Param("modiTime") Date modiTime);
    public void removeLocNormal(@Param("matnr") String matnr, @Param("modiUser") Long modiUser, @Param("modiTime") Date modiTime);
    public void locNormalIn(List<LocNormal> list);
    public void pdaLocNormalIn(List<LocNormal> list);
    public void locNormalIn(List<LocNormal> list);
    public List<LocNormal> pdaLocNormalQuery(@Param("matnr") String matnr, @Param("warehouse") String warehouse);
    public void pdaLocNormalOut1(@Param("id") Integer id,@Param("matnr") String matnr, @Param("modiUser") Long modiUser, @Param("modiTime") Date modiTime, @Param("warehouse") String warehouse);
    public void pdaLocNormalOut2(@Param("id") Integer id,@Param("matnr") String matnr,@Param("anfme") BigDecimal anfme, @Param("modiUser") Long modiUser, @Param("modiTime") Date modiTime, @Param("warehouse") String warehouse);
}
src/main/java/com/zy/asrs/service/LocNormalService.java
@@ -10,13 +10,17 @@
public interface LocNormalService extends IService<LocNormal> {
  List<LocNormal> getLocNormalData();
  public void updateLocNormal(String matnr, Double anfme, Long modiUser, Date modiTime);
  public void updateLocNormal(String matnr, BigDecimal anfme, Long modiUser, Date modiTime);
  public void outLocNormal(String matnr, Long modiUser, Date modiTime);
  public void removeLocNormal(String matnr, Long modiUser, Date modiTime);
  public void locNormalIn(List<LocNormal> list);
  public void pdaLocNormalIn(List<LocNormal> list);
  public void locNormalIn(List<LocNormal> list);
  public List<LocNormal> pdaLocNormalQuery(String matnr, String warehouse);
  public void pdaLocNormalOut(List<LocNormal> list);
}
src/main/java/com/zy/asrs/service/impl/LocNormalServiceImpl.java
@@ -21,7 +21,7 @@
    }
    @Override
    public void updateLocNormal(String matnr, Double anfme, Long modiUser, Date modiTime) {
    public void updateLocNormal(String matnr, BigDecimal anfme, Long modiUser, Date modiTime) {
        baseMapper.updateLocNormal(matnr, anfme, modiUser, modiTime);
    }
@@ -36,12 +36,30 @@
    }
    @Override
    public void locNormalIn(List<LocNormal> list) {
        baseMapper.locNormalIn(list);
    }
    @Override
    public void pdaLocNormalIn(List<LocNormal> list) {
        baseMapper.pdaLocNormalIn(list);
    }
    @Override
    public void locNormalIn(List<LocNormal> list) {
        baseMapper.locNormalIn(list);
    public List<LocNormal> pdaLocNormalQuery(String matnr, String warehouse) {
       return baseMapper.pdaLocNormalQuery(matnr, warehouse);
    }
    @Override
    public void pdaLocNormalOut(List<LocNormal> list) {
        for (Integer i = 0; i < list.size(); i++) {
            if (list.get(i).getAnfme().equals(list.get(i).getAnfmeOut())) {
                baseMapper.pdaLocNormalOut1(list.get(i).getId(), list.get(i).getMatnr(), list.get(i).getModiUser(), list.get(i).getModiTime(), list.get(i).getWarehouse());
            }
            if (list.get(i).getAnfmeOut().compareTo(list.get(i).getAnfme()) == -1) {
                BigDecimal diff = (list.get(i).getAnfme()).subtract(list.get(i).getAnfmeOut());
                baseMapper.pdaLocNormalOut2(list.get(i).getId(), list.get(i).getMatnr(), diff, list.get(i).getModiUser(), list.get(i).getModiTime(), list.get(i).getWarehouse());
            }
        }
    }
}
src/main/java/com/zy/common/utils/excel/locNomal/LocNormalExcel.java
@@ -4,6 +4,7 @@
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
@@ -26,7 +27,7 @@
    @ExcelProperty(index = 7)
    private String brand;
    @ExcelProperty(index = 8)
    private Double anfme;
    private BigDecimal anfme;
    @ExcelProperty(index = 9)
    private String altme;
    @ExcelProperty(index = 10)
@@ -44,7 +45,7 @@
    }
    public LocNormalExcel(String matnr, String maktx, String lgnum, String type, String mnemonic, String supplier, String warehouse, String brand, Double anfme, String altme, String bname, String memo, Long appeUser, Date appeTime,String state) {
    public LocNormalExcel(String matnr, String maktx, String lgnum, String type, String mnemonic, String supplier, String warehouse, String brand, BigDecimal anfme, String altme, String bname, String memo, Long appeUser, Date appeTime,String state) {
        this.matnr = matnr;
        this.maktx = maktx;
        this.lgnum = lgnum;
@@ -126,11 +127,11 @@
        this.brand = brand;
    }
    public Double getAnfme() {
    public BigDecimal getAnfme() {
        return anfme;
    }
    public void setAnfme(Double anfme) {
    public void setAnfme(BigDecimal anfme) {
        this.anfme = anfme;
    }
src/main/java/com/zy/common/web/BaseController.java
@@ -17,6 +17,8 @@
import java.lang.reflect.Modifier;
import java.util.*;
import static sun.security.krb5.internal.crypto.Nonce.value;
/**
 * Created by vincent on 2019-09-09
 */
@@ -113,7 +115,11 @@
            }
            String column = null;
            if (field.isAnnotationPresent(TableField.class)) {
                column = field.getAnnotation(TableField.class).value();
                TableField annotation = field.getAnnotation(TableField.class);
                if (!annotation.exist()) {
                   continue;
                }
                column = annotation.value();
            }
            if (Cools.isEmpty(column)) {
                column = field.getName();
src/main/resources/mapper/LocNormalMapper.xml
@@ -43,18 +43,6 @@
        modi_time = #{modiTime, jdbcType=TIMESTAMP} where matnr = #{matnr,jdbcType=VARCHAR}
    </update>
    <insert id="pdaLocNormalIn">
        BEGIN
        <foreach collection="list" item="item" index="index">
            INSERT INTO asr_loc_normal (matnr, maktx, anfme, warehouse, state, appe_user, appe_time)
            VALUES (#{item.matnr,jdbcType=VARCHAR}, #{item.maktx,jdbcType=VARCHAR}, #{item.anfme,jdbcType=DECIMAL},
            #{item.warehouse,jdbcType=VARCHAR}, '1', #{item.appeUser,jdbcType=DECIMAL},
            #{item.appeTime,jdbcType=TIMESTAMP})
        </foreach>
        END;
    </insert>
    <insert id="locNormalIn">
        BEGIN
        <foreach collection="list" item="item" index="index">
@@ -68,4 +56,31 @@
        </foreach>
        END;
    </insert>
    <insert id="pdaLocNormalIn">
        BEGIN
        <foreach collection="list" item="item" index="index">
            INSERT INTO asr_loc_normal (matnr, maktx, anfme, warehouse, state, appe_user, appe_time)
            VALUES (#{item.matnr,jdbcType=VARCHAR}, #{item.maktx,jdbcType=VARCHAR}, #{item.anfme,jdbcType=DECIMAL},
            #{item.warehouse,jdbcType=VARCHAR}, '1', #{item.appeUser,jdbcType=DECIMAL},
            #{item.appeTime,jdbcType=TIMESTAMP})
        </foreach>
        END;
    </insert>
    <select id="pdaLocNormalQuery" resultMap="BaseResultMap">
        select id, matnr,maktx, warehouse,anfme from asr_loc_normal
        where warehouse = #{warehouse,jdbcType=VARCHAR} and matnr =#{matnr,jdbcType=VARCHAR}
        and state = '1' COLLATE Chinese_PRC_CS_AS
    </select>
    <update id="pdaLocNormalOut1">
        update asr_loc_normal set state = '2',modi_user = #{modiUser, jdbcType=DECIMAL},modi_time = #{modiTime, jdbcType=TIMESTAMP}
        where matnr = #{matnr,jdbcType=VARCHAR} and warehouse = #{warehouse,jdbcType=VARCHAR} and id = #{id,jdbcType=DECIMAL}
    </update>
    <update id="pdaLocNormalOut2">
        update asr_loc_normal set anfme = #{anfme, jdbcType=DECIMAL},modi_user = #{modiUser, jdbcType=DECIMAL},modi_time = #{modiTime, jdbcType=TIMESTAMP}
        where matnr = #{matnr,jdbcType=VARCHAR} and warehouse = #{warehouse,jdbcType=VARCHAR} and id = #{id,jdbcType=DECIMAL}
    </update>
</mapper>
src/main/webapp/views/pda/index.html
@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en">
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>
@@ -108,7 +108,9 @@
        <td>
            <a id="locNormalIn" onclick="nav(this.id)" class="nav-unselect" href="#">平仓入库</a>
        </td>
        <td></td>
        <td>
            <a id="locNormalOut" onclick="nav(this.id)" class="nav-unselect" href="#">平仓出库</a>
        </td>
    </tr>
</table>
src/main/webapp/views/pda/locNormalOut.html
New file
@@ -0,0 +1,316 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>平仓出库</title>
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/pda.css" media="all">
    <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
    <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
    <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
    <script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
</head>
<style>
    .number-tool {
        margin-left: 10px;
        padding: 1px 0 1px 5px;
        display: inline-block;
        width: 120px;
    }
    .number-tool:after {
        clear: both;
        content: "";
        display: table;
    }
    .number-tool button {
        background-color: #fff;
        margin-top: 3px;
        font-size: 16px;
        height: 25px;
        float: left;
        width: 25px;
        border: 1px solid #777777;
    }
    .number-tool input {
        text-align: center;
        height: 30px;
        float: left;
        margin: 0 5px;
        width: 50px;
        padding: 0;
    }
</style>
<body>
<header>
    <div>
        <div class="layui-input-inline">
            <label class="layui-form-label">库&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;区</label>
            <input class="layui-input" type="number" id="warehouse" onkeyup="findCode(this, 'warehouse')" placeholder="扫码 / 输入"
                   autocomplete="off">
        </div>
        <div class="layui-input-inline">
            <label class="layui-form-label">物料编码</label>
            <input class="layui-input" id="matnr" onkeyup="findCode(this, 'matnr')" placeholder="扫码 / 输入" style="width: 65%"
                   autocomplete="off">
        </div>
    </div>
</header>
<main>
    <table class="layui-table" id="locNormalOut" lay-filter="locNormalOut"></table>
</main>
<footer>
    <div class="layui-btn-container">
        <button type="button" id="reset-btn" class="layui-btn layui-btn-primary" onclick="reset()">重置</button>
        <button type="button" id="out-btn" class="layui-btn layui-btn-normal " onclick="locNormalOut()"
                style="margin-left: 20px">出库
        </button>
        <button type="button" id="retrun-btn" class="layui-btn layui-btn-primary " onclick="back()"
                style="margin-left: 20px">返回
        </button>
        <span id="tips"></span>
    </div>
</footer>
<!-- 修改数量弹窗 -->
<div id="modify" style="display: none; text-align: center;padding-top: 10px">
    <div class="form-item">
        <span>编码</span>
        <input id="matnr2" type="text" disabled="disabled" style="width: 70%">
    </div>
    <div class="form-item">
        <span>名称</span>
        <input id="maktx2" type="text" disabled="disabled" style="width: 70%">
    </div>
    <input id="index" type="text" disabled="disabled" style="display: none;">
    <div class="form-item" style="margin-top: 5px; margin-bottom: 8px">
        <span style="vertical-align: middle">数量</span>
        <div class="number-tool" style="vertical-align: middle">
            <button onclick="reduce()">-</button><input id="anfme2" type="number" onchange="fix(this)"><button onclick="add()">+</button>
        </div>
    </div>
    <button id="remove" onclick="remove()">移除</button>
    <button id="confirm" onclick="confirm()">保存</button>
</div>
</body>
<script>
    var countLayer;
    // 当前点击物料的最大数量
    var maxCount;
    // 表格数据
    var normalOutList = [];
    window.onload = function () {
        document.getElementById("warehouse").focus();
    }
    /**
     * 提示信息
     * @param msg 提示内容
     * @param warn true:红色字体
     */
    function tips(msg, warn) {
        layer.msg(msg, {icon: warn?2:1})
    }
    function back() {
        parent.backIndex();
    }
    var tableIns;
    layui.use(['table','laydate', 'form'], function() {
        var table = layui.table;
        var $ = layui.jquery;
        var layer = layui.layer;
        var form = layui.form;
        tableIns = table.render({
            id: 'locNormalOut',
            elem: '#locNormalOut',
            data: [],
            limit: 500,
            cellMinWidth: 50,
            cols: [[
                {type: 'checkbox', fixed: 'left', width:30},
                {field: 'anfmeOut', align: 'center', title: '数量', event: 'detail', style:'color: blue', event: 'modify', style:'cursor: pointer;color: blue', width:50},
                {field: 'matnr', align: 'center', title: '编码', event: 'detail', width:80},
                {field: 'maktx', align: 'center', title: '名称', event: 'detail'},
                {field: 'warehouse', align: 'center', title: '库区', event: 'detail', width:50}
            ]],
            done: function (res, curr, count) {
            }
        });
        // 监听行工具事件
        table.on('tool(locNormalOut)', function(obj) {
            var data = obj.data;
            switch (obj.event) {
                case 'modify':
                    countLayer = layer.open({
                        type: 1,
                        offset: '20px',
                        title: '修改数量',
                        shadeClose: true,
                        area: ['80%', '200px'],
                        content: $("#modify"),
                        success: function (layero, index) {
                            $('#matnr2').val(data.matnr);
                            $('#maktx2').val(data.maktx);
                            $('#index').val(data.id);
                            $('#anfme2').val(0);
                            maxCount = data.anfme;
                        }
                    });
                    break;
            }
        });
    });
    var warehouseBar;
    var matnrBar;
    /* 扫码、输入库区和物料编码 */
    function findCode(el, type) {
        switch (type) {
            case 'warehouse':
                warehouseBar = el.value;
                break;
            case 'matnr':
                matnrBar =  el.value;
                break;
            default:
                break;
        }
        // 判断库区或者物料编码都不为空
        if (!warehouseBar || !matnrBar) {
            return;
        }
        $.ajax({
            url: baseUrl + "/locNormal/pda/out/query?matnr="+matnrBar+"&warehouse="+warehouseBar,
            headers: {'token': localStorage.getItem('token')},
//            contentType: 'application/json;charset=UTF-8',
            method: 'GET',
            async: false,
            success: function (res) {
                if (res.code === 200) {
                    if (res.data && res.data.length > 0) {
                        res.data.map(function (item) {
                            // 默认赋值0开始
                           item.anfmeOut = 0;
                        });
                    }
                    tableIns.reload({
                        data: res.data,
                    });
                    normalOutList = res.data;
                } else if (res.code === 403) {
                    top.location.href = baseUrl + "/pda";
                } else {
                    tips(res.msg, true)
                }
            },
        });
    }
    /* 修改数量 */
    var countDom = $('#anfme2');
    function add() {
        if (countDom.val() >= maxCount) {
            return;
        }
        countDom.val(Number(countDom.val()) + 1);
    }
    function reduce() {
        if (countDom.val() <= 0) {
            return;
        }
        countDom.val(Number(countDom.val()) - 1);
    }
    function fix(e) {
        if (Number(e.value) > maxCount) {
            countDom.val(maxCount);
        }
    }
    function remove() {
        var matnr = $('#matnr2').val();
        var index = $('#index').val();
        for (var j=0;j<normalOutList.length;j++){
            if (matnr === normalOutList[j].matnr && index == normalOutList[j].id) {
                normalOutList.splice(j, 1);
            }
        }
        tableIns.reload({data: normalOutList});
        layer.close(countLayer);
        tips("移除成功");
    }
    // 修改数量
    function confirm(){
        var matnr = $('#matnr2').val();
        var count = $('#anfme2').val();
        var index = $('#index').val();
        for (var j=0;j<normalOutList.length;j++){
            if (matnr === normalOutList[j].matnr && index == normalOutList[j].id) {
                if (count > maxCount || count < 0) {
                    tips("数量不能超过范围", true);
                    return;
                }
                normalOutList[j].anfmeOut = Number(count);
            }
        }
        tableIns.reload({data: normalOutList});
        layer.close(countLayer);
        tips("修改成功");
    }
    /* 平仓出库 */
    function locNormalOut() {
        // 调用出库接口,如果数量不是全部则进行update更新anfme字段,如果是全部数量则直接update更新state字段1→2
        var table = layui.table;
        var checkStatus = table.checkStatus('locNormalOut');
        var data = checkStatus.data;
        if (data.length == 0) {
            layer.msg("请选择物料!");
            return;
        }
        // 库区赋值
        var warehouse = $('#warehouse').val();
        data.map(function (item) {
           item.warehouse =  warehouse;
        });
        // 出库接口
        $.ajax({
            url: baseUrl + "/locNormal/pda/out",
            headers: {'token': localStorage.getItem('token')},
            data: JSON.stringify({
                normalList: data,
            }),
            contentType: 'application/json;charset=UTF-8',
            method: 'POST',
            async: false,
            success: function (res) {
                if (res.code === 200) {
                    layer.msg("出库成功");
                    $("#matnr").val(null);
                    $("#warehouse").val(null);
                    warehouseBar = null;
                    matnrBar = null;
                    normalOutList = [];
                    tableIns.reload({
                        data: normalOutList,
                    })
                } else if (res.code === 403) {
                    top.location.href = baseUrl + "/pda";
                } else {
                    tips(res.msg, true)
                }
            },
        });
    }
</script>
</html>
version/version/wjh.sql
@@ -35,3 +35,7 @@
    [update_time] [datetime] NULL,
    [memo] [varchar](255) NULL
) ON [PRIMARY]
/* v1.0.3 2021.03.11 */
--表结构变更
alter table asr_loc_normal add id int identity(1,1)