CZT
2023-07-04 804bea41b340cb04ac57e8fbdeb2d54938a80a5a
提交出入库化验--扫码功能
已修改8个文件
512 ■■■■ 文件已修改
igds-inout/src/main/java/com/ld/igds/inout/controller/InoutController.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-inout/src/main/java/com/ld/igds/inout/manager/InoutManager.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-inout/src/main/java/com/ld/igds/inout/mapper/InoutCheckMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-inout/src/main/java/com/ld/igds/inout/service/InoutService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-inout/src/main/java/com/ld/igds/inout/service/impl/InoutServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-inout/src/main/resources/mapper/InoutCheckMapper.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-web/src/main/resources/static/admin/inout/in-check.js 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-web/src/main/resources/templates/admin/inout/in-check.html 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-inout/src/main/java/com/ld/igds/inout/controller/InoutController.java
@@ -33,6 +33,8 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -692,9 +694,33 @@
        return inoutManager.submitComplete(data);
    }
    /**
     * 根据质检单号获取出入库信息
     * @param param
     * @return
     */
    @RequestMapping("/inout-check-scan-code")
    public PageResponse<InoutCheckData> inoutDataByCheckId(@RequestBody InoutCheckParam param) {
        if (null == param.getCompanyId()) {
            param.setCompanyId(ContextUtil.getCompanyId());
        }
        return inoutManager.inoutDataByCheckId(param);
    }
    /**
     * 质检页面提交
     * 质检页面仅提交保存化验信息
     *
     * @param data
     * @return
     */
    @RequestMapping("/submit-checkItem")
    @Transactional
    public PageResponse<InoutCheckData> submitCheckItem(@RequestBody InoutCheckData data)throws Exception {
        return inoutManager.submitCheckData(data);
    }
    /**
     * 质检页面提交下一流程
     *
     * @param data
     * @return
igds-inout/src/main/java/com/ld/igds/inout/manager/InoutManager.java
@@ -881,6 +881,47 @@
        return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功");
    }
    public PageResponse<InoutCheckData> submitCheckData(InoutCheckData data) throws Exception {
        // 获取业务数据信息
        InoutParam param = new InoutParam();
        param.setCompanyId(data.getCompanyId());
        param.setId(data.getId());
        InoutData curData = inoutService.inoutProgressQuery(param);
        if (null == curData) {
            return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(),
                    "没有获取到入库业务数据信息,更新失败", data);
        }
        if (InoutConstant.PROGRESS_RECORD.equals(curData.getProgress())) {
            return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(),
                    "当前流程已经结束,不支持修改");
        }
        // 更新化验项信息
        CheckUpdateResult checkResult = checkStandardManager.updateCheckItems(data.getCheckId(), data.getCompanyId(), data.getCheckItems());
        if (StringUtils.isNotEmpty(checkResult.getMsg())) {
            return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(),
                    "后台执行异常:" + checkResult.getMsg(), data);
        }
        curData.setType(curData.getType());
        curData.setFoodLevel(data.getFoodLevel());
        curData.setFoodVariety(data.getFoodVariety());
        curData.setPrice(data.getPrice());
        curData.setDepotId(data.getDepotId());
        curData.setCheckItems(data.getCheckItems());
        String msg = inoutService.updateCheckData(curData);
        if (null != msg) {
            return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), msg);
        }
        return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "保存成功");
    }
    /**
     * @param param
     * @return
@@ -952,4 +993,32 @@
        }
    }
    /**
     *
     * @param param
     * @return
     */
    public PageResponse<InoutCheckData> inoutDataByCheckId(InoutCheckParam param) {
        if (StringUtils.isEmpty(param.getCheckId())) {
            return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(),
                    "查询参数不完整,查询失败!");
        }
        InoutCheckData result;
        try {
            param.setProgress(InoutConstant.PROGRESS_CHECK);
            result = inoutService.inoutDataByCheckId(param);
            if (null == result) {
                return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(),
                        "系统未查询到执行中的车辆信息", null);
            }
            return new PageResponse<>(RespCodeEnum.CODE_0000, result);
        } catch (Exception e) {
            return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(),
                    e.getMessage());
        }
    }
}
igds-inout/src/main/java/com/ld/igds/inout/mapper/InoutCheckMapper.java
@@ -58,4 +58,13 @@
     * @return
     */
    List<InoutPrice> getPrice(@Param("param") InoutCheckParam param);
    /**
     * 根据质检单号获取出入库数据
     *
     * @param param
     * @return
     */
    List<InoutCheckData> inoutDataByCheckId(@Param("param") InoutCheckParam param);
}
igds-inout/src/main/java/com/ld/igds/inout/service/InoutService.java
@@ -254,4 +254,13 @@
     * @param id
     */
    void delFromCache(String deptId, String type, String id);
    /**
     * 根据参数查询数据,流程中的数据
     *
     * @param param
     * @return
     * @throws Exception
     */
    InoutCheckData inoutDataByCheckId(InoutCheckParam param) throws Exception;
}
igds-inout/src/main/java/com/ld/igds/inout/service/impl/InoutServiceImpl.java
@@ -712,4 +712,16 @@
        }
        return inoutCheckMapper.getPrice(param);
    }
    @Override
    public InoutCheckData inoutDataByCheckId(InoutCheckParam param) throws Exception {
        List<InoutCheckData> list = inoutCheckMapper.inoutDataByCheckId(param);
        if (null == list || list.size() == 0)
            return null;
        if (list.size() == 1) {
            return list.get(0);
        } else {
            throw new Exception("当前条件下存在多个满足条件的数据,请核查!!");
        }
    }
}
igds-inout/src/main/resources/mapper/InoutCheckMapper.xml
@@ -151,4 +151,40 @@
        ORDER BY UPDATE_TIME_
    </select>
    <!--分页获取化验数据-->
    <select id="inoutDataByCheckId" resultType="com.ld.igds.inout.dto.InoutCheckData"
            parameterType="com.ld.igds.inout.dto.InoutCheckParam">
        select
        ID_ as id,
        COMPANY_ID_ as companyId,
        DEPT_ID_ as deptId,
        TYPE_ as type,
        PROGRESS_ as progress,
        RECORD_STATUS_ as recordStatus,
        INTEL_CARD_ as intelCard,
        REGISTER_TIME_ as registerTime,
        REGISTER_USER_ as registerUser,
        DEPOT_ID_ as depotId,
        FOOD_VARIETY_ as foodVariety,
        FOOD_LEVEL_ as foodLevel,
        PRICE_ as price,
        PLATE_NUM_ as plateNum,
        SAMPLE_USER_ as sampleUser,
        SAMPLE_TIME_ as sampleTime,
        CHECK_USER_ as checkUser,
        CHECK_TIME_ as checkTime,
        CHECK_ID_ as checkId,
        CHECK_STATUS_ AS checkStatus,
        REMARKS_ AS remarks
        from
        D_INOUT_RECORD
        <where>
            <if test="param.companyId != null and param.companyId != '' ">AND COMPANY_ID_ = #{param.companyId}</if>
            <if test="param.checkId != null and param.checkId != '' ">AND CHECK_ID_ = #{param.checkId}</if>
            <if test="param.progress != null and param.progress != '' ">AND PROGRESS_ = #{param.progress}</if>
        </where>
        AND RECORD_STATUS_ != 'DEL'
        ORDER BY REGISTER_TIME_
    </select>
</mapper>
igds-web/src/main/resources/static/admin/inout/in-check.js
@@ -3,6 +3,7 @@
var laydate;
var form;
var table;
var scanCodeTag = false;
var page = 1;
var limit = 10;
var curCheckData = null;// 当前编辑数据
@@ -41,9 +42,9 @@
        table.on('tool(tableData)', function (obj) {
            if (obj.event === 'edit') {
                //更新仓库下拉列表
                updateSelect(obj);
                updateSelect();
                //展示数据
                showDetail(obj);
                showDetail(obj.data);
            }
        });
@@ -75,7 +76,7 @@
function socketOnMessage(packet) {
    layer.alert(packet.data);
    window.parent.sysNotify(packet.data);
};
}
//控制流程环节显示
function showProgress() {
@@ -141,9 +142,8 @@
}
//动态更换仓库下拉列表
function updateSelect(obj) {
function updateSelect() {
    $('#depotId option').remove();
    var dat = obj.data;
    for (var i = 0; i < listDepot.length; i++) {
        $('#depotId').append('<option value="' + listDepot[i].id + '">' + listDepot[i].name + '</option>');
    }
@@ -330,81 +330,6 @@
    return str.slice(0, 1) + "***" + str.slice(split.length - 1);
}
function showDetail(obj) {
    curCheckData = obj.data;
    curSampleData = obj.data;
    if (!curCheckData.checkTime) {
        curCheckData.checkTime = dateFtt("yyyy-MM-dd hh:mm:ss", new Date());
    }
    curCheckData.checkUser = checkUser;
    // 赋值
    form.val("form-detail", curCheckData);
    form.render();
    layer.open({
        type: 1,
        title: "化验单明细",
        area: ['1400px', '700px'],
        shade: 0,
        content: $('#checkDetail'),
        btnAlign: 'c',
        btn: ['保存提交', '关闭取消'],
        yes: function () {
            // 更新到页面
            var data = form.val("form-detail");
            obj.update(data);
            // 合并更新當前编辑数据
            Object.assign(curCheckData, data);
            submit();
        }, btn2: function () {
            layer.closeAll();
        },
        closeBtn: 0
    });
    // 获取化验项信息
    flushCheckItem(curCheckData.foodVariety);
    getPriceByFoodLevel(curCheckData.foodLevel);
}
/**
 * 刷新化验结果项
 */
function flushCheckItem(foodVariety) {
    curCheckItems = null;
    $("#check-result-tip").text("检验结果:#");
    $("#price-result-tip2").text("粮食定价:#元/公斤");
    curCheckData.foodVariety = foodVariety;
    var index = layer.load();
    $.ajax({
        type: "POST",
        url: "../../basic/inout/get-check-item",
        dataType: "json",
        contentType: "application/json;charset=UTF-8",
        data: JSON.stringify(curCheckData),
        success: function (result) {
            if (result.code != "0000") {
                layer.msg(result.msg);
            } else {
                curCheckItems = result.data;
                // 根据化验结果提醒是否合格
                updateCheckResultTip();
                // 页面渲染检测项
                renderTableCheckItem();
                layer.close(index);
            }
        },
        error: function () {
            layer.close(index);
            layer.msg("后台异常,请重试或者联系管理员!!");
        }
    });
};
// 更新化验结果提醒,只做提醒,不做自动判断
function updateCheckResultTip() {
    if (!curCheckItems || curCheckItems.length == 0) {
@@ -518,10 +443,129 @@
        "border-bottom": "2px solid #53adce",
        "background": "#eff4f6"
    });
}
function showDetail(data) {
    curCheckData = data;
    if (!curCheckData.checkTime) {
        curCheckData.checkTime = dateFtt("yyyy-MM-dd hh:mm:ss", new Date());
    }
    curCheckData.checkUser = checkUser;
    // 赋值
    form.val("form-detail", curCheckData);
    form.render();
    layer.open({
        type: 1,
        title: "化验单明细",
        area: ['1400px', '700px'],
        shade: 0,
        content: $('#checkDetail'),
        btnAlign: 'c',
        btn: ['仅保存', '保存提交','关闭取消'],
        yes: function () {
            // 更新到页面
            var data = form.val("form-detail");
            // 合并更新當前编辑数据
            Object.assign(curCheckData, data);
            saveCheckData();
            if(scanCodeTag){
                showScanCode();
            }
        }, btn2: function () {
            // 更新到页面
            var data = form.val("form-detail");
            // 合并更新當前编辑数据
            Object.assign(curCheckData, data);
            submit();
            if(scanCodeTag){
                showScanCode();
            }
        }, btn3: function () {
            parent.layer.closeAll();
            if(scanCodeTag){
                showScanCode();
            }
        },
        closeBtn: 0
    });
    // 获取化验项信息
    flushCheckItem(curCheckData.foodVariety);
    getPriceByFoodLevel(curCheckData.foodLevel);
}
/**
 * 刷新化验结果项
 */
function flushCheckItem(foodVariety) {
    curCheckItems = null;
    $("#check-result-tip").text("检验结果:#");
    $("#price-result-tip2").text("粮食定价:#元/公斤");
    curCheckData.foodVariety = foodVariety;
    var index = layer.load();
    $.ajax({
        type: "POST",
        url: "../../basic/inout/get-check-item",
        dataType: "json",
        contentType: "application/json;charset=UTF-8",
        data: JSON.stringify(curCheckData),
        success: function (result) {
            if (result.code != "0000") {
                layer.msg(result.msg);
            } else {
                curCheckItems = result.data;
                // 根据化验结果提醒是否合格
                updateCheckResultTip();
                // 页面渲染检测项
                renderTableCheckItem();
                layer.close(index);
            }
        },
        error: function () {
            layer.close(index);
            layer.msg("后台异常,请重试或者联系管理员!!");
        }
    });
};
//仅保存
function saveCheckData() {
    if (!curCheckData.foodVariety) {
        layer.alert("请确认粮食品种!!");
        return;
    }
    curCheckData.checkItems = curCheckItems;
    var index1 = layer.load();
    $.ajax({
        type: "POST",
        url: "../../basic/inout/submit-checkItem",
        dataType: "json",
        contentType: "application/json;charset=UTF-8",
        async: false,
        data: JSON.stringify(curCheckData),
        success: function (result) {
            if (result.code != "0000") {
                layer.close(index1);
                notify(result.msg, result.data);
            } else {
                layer.closeAll();
                curCheckData = null;
                notify("数据保存成功", result.data);
                flushData();
            }
        },
        error: function () {
            layer.close(index1);
            layer.alert("保存失败,请重新尝试!");
        }
    });
}
// 当前完成
//保存提交
function submit() {
    if (curCheckData.checkStatus == "NONE" || curCheckData.checkStatus == "NONE2") {
        layer.alert("请确认化验结果!!");
@@ -547,16 +591,15 @@
        url: "../../basic/inout/submit-check",
        dataType: "json",
        contentType: "application/json;charset=UTF-8",
        async: false,
        data: JSON.stringify(curCheckData),
        success: function (result) {
            if (result.code != "0000") {
                layer.close(index);
                //layer.alert(result.msg);
                notify(result.msg, result.data);
            } else {
                layer.closeAll();
                parent.layer.closeAll();
                curCheckData = null;
                //layer.alert("数据提交成功!");
                notify("数据提交成功", result.data);
                flushData();
            }
@@ -566,7 +609,69 @@
            layer.alert("提交失败,请重新尝试!");
        }
    });
};
}
//扫码弹窗
function showScanCode() {
    //清空表单
    $("#form-sacnCodeDetail")[0].reset();
    form.render();
    //扫码弹窗-赋值true
    scanCodeTag = true;
    layer.open({
        type: 1,
        title: "扫码信息",
        area: ['700px', '320px'],
        shade: 0,
        content: $('#scanCodeDetail'),
        success: function(layero, index){
            document.getElementById('checkId').focus();
        },
        btnAlign: 'c',
        btn: ['查询', '关闭取消'],
        yes: function () {
            getDataByCheckId();
        }, btn2: function () {
            scanCodeTag = false;
            layer.closeAll();
        },
        closeBtn: 0
    });
}
//根据质检单号获取信息
function getDataByCheckId() {
    var param = form.val("form-sacnCodeDetail");
    if(!param.checkId){
        layer.alert("质检单号为空,请扫码或输入质检单号");
    }
    var index = layer.load();
    $.ajax({
        type: "POST",
        url: "../../basic/inout/inout-check-scan-code",
        dataType: "json",
        contentType: "application/json;charset=UTF-8",
        data: JSON.stringify(param),
        success: function (result) {
            if (result.code != "0000") {
                layer.close(index);
                $("#form-sacnCodeDetail")[0].reset();
                form.render();
                notify(result.msg, result.data);
            } else {
                updateSelect();
                showDetail(result.data);
            }
        },
        error: function () {
            layer.close(index);
            $("#form-sacnCodeDetail")[0].reset();
            form.render();
            layer.alert("保存失败,请重新尝试!");
        }
    });
}
// 渲染表单数据
function renderTable() {
igds-web/src/main/resources/templates/admin/inout/in-check.html
@@ -111,6 +111,11 @@
        .input_ba {
            background: #e7eaec !important;
        }
        .layui-layer-btn .layui-layer-btn1 {
            border-color: #53adce;
            background-color: #53adce;
            color: #fff;
        }
    </style>
</head>
@@ -122,29 +127,32 @@
        <div class="qyzj-btnbox layui-clear">
            <div class="rkbk-quick fl">
                <button type="button" class="rkbk-quick-btn layui-btn btn-violet"
                        onclick="checkExe('big')">
                    <i><img th:src="@{../../static/images/icon-hyd.png}"/></i>大车扦样
                <button type="button" class="rkbk-quick-btn layui-btn btn-violet" onclick="showScanCode()">
                    <i><img th:src="@{../../static/images/icon-hyd.png}"/></i>扫码录入
                </button>
<!--                <button type="button" class="rkbk-quick-btn layui-btn btn-violet"-->
<!--                        onclick="checkExe('big')">-->
<!--                    <i><img th:src="@{../../static/images/icon-hyd.png}"/></i>大车扦样-->
<!--                </button>-->
                <button type="button" class="rkbk-quick-btn layui-btn btn-violet"
                        onclick="checkExe('small')">
                    <i><img th:src="@{../../static/images/icon-hyd.png}"/></i>小车扦样
                </button>
<!--                <button type="button" class="rkbk-quick-btn layui-btn btn-violet"-->
<!--                        onclick="checkExe('small')">-->
<!--                    <i><img th:src="@{../../static/images/icon-hyd.png}"/></i>小车扦样-->
<!--                </button>-->
                <button class="rkbk-quick-btn layui-btn btn-blue"
                        onclick="checkReset()">
                    <i><img th:src="@{../../static/images/icon-fuwei.png}"/></i>扦样复位
                </button>
<!--                <button class="rkbk-quick-btn layui-btn btn-blue"-->
<!--                        onclick="checkReset()">-->
<!--                    <i><img th:src="@{../../static/images/icon-fuwei.png}"/></i>扦样复位-->
<!--                </button>-->
                <button class="rkbk-quick-btn layui-btn btn-red"
                        onclick="checkStop()">
                    <i><img th:src="@{../../static/images/icon-stop.png}"/></i>扦样急停
                </button>
                <button class="rkbk-quick-btn layui-btn btn-blue"
                        onclick="checkResetStop()">
                    <i><img th:src="@{../../static/images/icon-fuwei.png}"/></i>急停复位
                </button>
<!--                <button class="rkbk-quick-btn layui-btn btn-red"-->
<!--                        onclick="checkStop()">-->
<!--                    <i><img th:src="@{../../static/images/icon-stop.png}"/></i>扦样急停-->
<!--                </button>-->
<!--                <button class="rkbk-quick-btn layui-btn btn-blue"-->
<!--                        onclick="checkResetStop()">-->
<!--                    <i><img th:src="@{../../static/images/icon-fuwei.png}"/></i>急停复位-->
<!--                </button>-->
            </div>
            <!--流程引导-->
@@ -357,16 +365,38 @@
<script th:src="@{../../static/js/jquery.min.js}"></script>
<script th:src="@{../../static/js/constant.js}"></script>
<script th:src="@{../../static/js/igds-common.js}"></script>
<script th:src="@{../../static/admin/inout/inout-common.js}"></script>
<script th:src="@{../../static/admin/inout/in-check.js}"></script>
<script type="text/html" id="barControl">
    <a class="layui-btn control-btn" lay-event="edit">化验</a>
    <a class="layui-btn control-btn" lay-event="edit">结果录入</a>
</script>
</body>
<!-- 扫码弹窗 -->
<div class="layui-tab-content" id="scanCodeDetail" style="display: none;">
    <!-- 表单基本信息 -->
        <form class="layui-form" id="form-sacnCodeDetail" lay-filter="form-sacnCodeDetail">
<!-- 化验信息 -->
            <div class="layui-col-xs12">
                <div class="layui-form-item">
                    <label class="layui-form-label">质检单号</label>
                    <div class="layui-input-block">
                        <input type="text" id="checkId" name="checkId" placeholder="请扫码,也可手动输入" class="layui-input">
                    </div>
                </div>
            </div>
            <div class="layui-col-xs12" style="margin-bottom: 10px">
                <div style="padding-left: 50px; color: #2ab5ad;">
                    <span style="font-weight: bold; margin-right: 10px;">备注:质检单号可以扫码,也可以手动输入,手动输入后需要点击查询</span>
                </div>
            </div>
        </form>
</div>
<!-- 手动录取化验信息弹窗 -->
<div class="layui-tab-content" id="checkDetail" style="display: none;">
    <!-- 表单基本信息 -->