zss
2025-02-18 bcc80a6833abe9f24abdb978f7c7f01b664a574f
优化调整
已修改10个文件
262 ■■■■ 文件已修改
cnas-server/src/main/java/com/yuanchu/mom/dto/DeviceDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/resources/mapper/DeviceMapper.xml 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/WarehouseController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/WarehouseShelf.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java 132 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsProductServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/WarehouseServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/WarehouseMapper.xml 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/dto/DeviceDto.java
@@ -43,4 +43,7 @@
    @ValueTableShow(value = 16, name = "下次校准日期")
    @ApiModelProperty(value = "下次校准日期")
    private LocalDateTime nextCalibrationDateTwo;
    @ApiModelProperty(value = "校准提醒")
    private String status;
}
cnas-server/src/main/resources/mapper/DeviceMapper.xml
@@ -102,12 +102,25 @@
        SEPARATOR ';'
        ) AS insProductItem,
        u.name ,
        l.laboratory_name
        l.laboratory_name,
        cmr.next_calibration_date nextCalibrationDateTwo,
        CASE
        WHEN cmr.next_calibration_date IS NULL THEN 0
        WHEN cmr.next_calibration_date BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 45 DAY) THEN 1
        ELSE 0
        END AS status
        FROM
        device d
        LEFT JOIN `user` u ON u.id = d.equipment_manager
        LEFT JOIN laboratory l ON l.id = d.subordinate_departments_id
        LEFT JOIN device_metric_record cmr ON d.id = cmr.device_id
        LEFT JOIN (SELECT
        device_id,
        type,
        MAX(next_calibration_date) AS next_calibration_date
        FROM
        device_metric_record
        GROUP BY
        device_id )cmr ON d.id = cmr.device_id
        LEFT JOIN structure_item_parameter sip ON FIND_IN_SET(sip.id, d.ins_product_ids)
        <where>
            <if test="laboratoryNameIsNull != null and laboratoryNameIsNull == true">
@@ -117,7 +130,7 @@
        </where>
        GROUP BY
        d.id,
        u.name, l.laboratory_name
        u.name, l.laboratory_name,cmr.next_calibration_date,status
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
@@ -109,6 +109,13 @@
        return Result.success(insOrderPlanService.verifyPlan(sampleId, laboratory, type, tell));
    }
    @ValueClassify("检验任务")
    @ApiOperation(value = "纠正复核")
    @PostMapping("/verifyPlan2")
    public Result<?> verifyPlan2(Integer sampleId, String laboratory, Integer type, String tell) throws IOException {
        return Result.success(insOrderPlanService.verifyPlan2(sampleId, laboratory, type, tell));
    }
    @ValueAuth
    @ApiOperation(value = "校验检验任务提交")
    @PostMapping("/checkSubmitPlan")
@@ -245,7 +252,6 @@
    @ValueAuth
    @PostMapping("/getInsProduct2")
    @ApiOperation("查看检验历史")
    //这里的id是样品id
    public Result<?> getInsProduct2(Integer id, Integer type, String laboratory, HttpServletRequest request, Integer num) {
        return Result.success(insOrderPlanService.getInsProduct2(id, type, laboratory, request, num));
    }
@@ -274,7 +280,6 @@
    @ValueAuth
    @PostMapping("/getCheckUser")
    @ApiOperation("获取当前检验任务的所有检验员信息")
    //这里的传参是样品id,等检验任务那块全改了之后这里就没问题
    public Result<?> getCheckUser(Integer id,String sonLaboratory) {
        List<InsSampleUser> insSampleUsers = insSampleUserMapper.selectList(Wrappers.<InsSampleUser>lambdaQuery()
                .eq(InsSampleUser::getState, 0)   //检验人
inspect-server/src/main/java/com/yuanchu/mom/controller/WarehouseController.java
@@ -29,10 +29,12 @@
    @ValueClassify("样品管理")
    @GetMapping("/selectWarehouse")
    @ApiOperation("查询仓库")
    @ApiOperation("查询仓库---仅查询为空货架")
    public Result selectWarehouse() {
        return Result.success(warehouseService.selectWarehouse());
    }
    @ValueClassify("样品管理")
    @PostMapping("/addShelf")
    @ApiOperation("添加货架")
@@ -95,4 +97,4 @@
    public Result getSampleRecord(Integer id) {
        return Result.success(warehouseService.getSampleRecord(id));
    }
}
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/WarehouseShelf.java
@@ -6,6 +6,7 @@
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
 * 货架
@@ -15,7 +16,7 @@
@Data
public class WarehouseShelf implements Serializable {
    /**
     *
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
@@ -38,7 +39,7 @@
    private Integer col;
    /**
     *
     *
     */
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
@@ -58,4 +59,7 @@
     * 外键:仓库id
     */
    private Integer warehouseId;
}
    @TableField(select = false,exist = false)
    List<WarehouseCell> warehouseCellList;
}
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java
@@ -39,6 +39,9 @@
    int verifyPlan(Integer sampleId, String laboratory, Integer type, String tell) throws IOException;
    //纠正复核错误的情况
    int verifyPlan2(Integer sampleId, String laboratory, Integer type, String tell) throws IOException;
    int submitPlan(SubmitPlanDto submitPlanDto);
    //撤销提交
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -354,7 +354,7 @@
                dianLuUtils.readDianLuFile1(sampleId, insOrderFile);
            } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("电路试验") && split[split.length - 1].equals("csv") && filename.contains("驻波")) {
                dianLuUtils.readDianLuFile2(sampleId, insOrderFile);
            }else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("电路试验") && split[split.length - 1].equals("csv") && insOrder.getSampleType().equals("无源器件")) {
            } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("电路试验") && split[split.length - 1].equals("csv") && insOrder.getSampleType().equals("无源器件")) {
                dianLuUtils.readDianLuFile3(sampleId, insOrderFile);
            }
        } catch (Exception e) {
@@ -891,7 +891,7 @@
        for (InsProductResultDto insProductResultDto : insProductResultDtos.getInsProductResultDtos()) {
            saveInsContext2(insProductResultDto);
        }
       return  1;
        return 1;
    }
    //温湿度试验+功率试验的保存检验内容
@@ -1061,16 +1061,9 @@
                            .set(InsOrderState::getVerifyTell, tell)
                            .set(InsOrderState::getVerifyUser, userId));
                    //如果订单类型是原理样机,则该订单直接闭环
                    if (insOrder.getFormType().equals("原理样机")) {
                        //出库
                        try {
                            List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSample.getInsOrderId()));
                            for (InsSample sample : insSamples) {
                                outInsOrderState(laboratory, sample.getSampleCode(), insOrder.getEntrustCode());
                            }
                        } catch (Exception e) {
                        }
                    List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSample.getInsOrderId()));
                    for (InsSample sample : insSamples) {
                        outInsOrderState(laboratory, sample.getSampleCode(), insOrder.getEntrustCode());
                    }
                    insOrder.setState(4);
                    insOrderMapper.updateById(insOrder);
@@ -1080,7 +1073,98 @@
        return 1;
    }
    private void getTemplateThing(Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) {
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int verifyPlan2(Integer sampleId, String laboratory, Integer type, String tell) throws IOException {
        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
        InsSample insSample = insSampleMapper.selectById(sampleId);
        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
        /*type=0  再次试验; type=1 继续试验 ; type=2 结束试验*/
        // 查询根据 id 倒序排列的第一条记录
        InsOrderState record = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
                .eq(InsOrderState::getInsSampleId, sampleId)
                .eq(InsOrderState::getLaboratory, laboratory)
                .orderByDesc(InsOrderState::getId)
                .last("LIMIT 1")); // 确保只取一条记录
        if (record != null) {
            //更新记录
            insOrderUserMapper.update(null, Wrappers.<InsOrderUser>lambdaUpdate()
                    .eq(InsOrderUser::getInsOrderStateId, record.getId())
                    .eq(InsOrderUser::getNum, record.getNum())
                    .set(InsOrderUser::getTell, tell));
            switch (type) {
                case 0:
                    //再次试验:该单子退回到检验状态(排序改成当前的最后),次数递增(保留以前的数据);
                    insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                            .eq(InsOrderState::getId, record.getId())
                            .set(InsOrderState::getInsTime, LocalDateTime.now())
                            .set(InsOrderState::getInsState, 4)
                            .set(InsOrderState::getVerifyTell, tell)
                            .set(InsOrderState::getVerifyUser, userId)
                            .set(InsOrderState::getNum, record.getNum() + 1)//次数加1
                            .set(InsOrderState::getCreateTime, LocalDateTime.now()));
                    insOrder.setState(3);
                    break;
                case 1:
                    //继续试验:该样品该站点任务结束(可以再次扫码检验);
                    //先判断上一个复核是什么结论
                    if (record.getInsState()==4){
                        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
                                .eq(InsOrderState::getInsSampleId, sampleId)
                                .eq(InsOrderState::getLaboratory, laboratory)
                                .set(InsOrderState::getInsState, 6)
                                .set(InsOrderState::getVerifyTell, tell)
                                .set(InsOrderState::getNum, record.getNum() - 1)//次数-1
                                .set(InsOrderState::getVerifyUser, userId));
                    }else {
                        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
                                .eq(InsOrderState::getInsSampleId, sampleId)
                                .eq(InsOrderState::getLaboratory, laboratory)
                                .set(InsOrderState::getInsState, 6)
                                .set(InsOrderState::getVerifyTell, tell)
                                .set(InsOrderState::getVerifyUser, userId));
                    }
                    insOrder.setState(3);
                    break;
                case 2:
                    //结束试验:此委托单停止试验(无法再次检验)。
                    //先判断上一个复核是什么结论
                    if (record.getInsState()==4){
                        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
                                .eq(InsOrderState::getInsSampleId, sampleId)
                                .eq(InsOrderState::getLaboratory, laboratory)
                                .set(InsOrderState::getInsState, 5)
                                .set(InsOrderState::getNum, record.getNum() - 1)//次数-1
                                .set(InsOrderState::getVerifyTell, tell)
                                .set(InsOrderState::getVerifyUser, userId));
                    }else {
                        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
                                .eq(InsOrderState::getInsSampleId, sampleId)
                                .eq(InsOrderState::getLaboratory, laboratory)
                                .set(InsOrderState::getInsState, 5)
                                .set(InsOrderState::getVerifyTell, tell)
                                .set(InsOrderState::getVerifyUser, userId));
                    }
                    //出库
                    List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSample.getInsOrderId()));
                    for (InsSample sample : insSamples) {
                        outInsOrderState(laboratory, sample.getSampleCode(), insOrder.getEntrustCode());
                    }
                    insOrder.setState(4);
                    break;
            }
            insOrderMapper.updateById(insOrder);
        }
        return 1;
    }
    private void getTemplateThing
            (Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) {
        for (InsProduct product : insProducts) {
            if (product.getTemplateId() == null) {
                product.setTemplate(new ArrayList<>());
@@ -1194,7 +1278,7 @@
        if (submitPlanDto.getLaboratory().equals("电路试验")) {
            if (!insOrder.getSampleType().equals("无源器件")) {
                wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
            }else {
            } else {
                wordUtils.generateWord2(submitPlanDto.getTerm(), orderState);
            }
            //todo 电路站点报告 正式库部署放开
@@ -1283,8 +1367,8 @@
        InsSample insSample = insSampleMapper.selectById(orderState.getInsSampleId());
        /*删除记录检验任务每次的备注信息*/
        insOrderUserMapper.delete(Wrappers.<InsOrderUser>lambdaQuery()
        .eq(InsOrderUser::getInsOrderStateId,orderState.getId())
        .eq(InsOrderUser::getNum,orderState.getNum()));
                .eq(InsOrderUser::getInsOrderStateId, orderState.getId())
                .eq(InsOrderUser::getNum, orderState.getNum()));
        //撤销提交
        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                .eq(InsOrderState::getInsOrderId, orderState.getInsOrderId())
@@ -1305,15 +1389,15 @@
        informationNotificationService.addInformationNotification(info);
        //删除复核人--检验单相关负责人
        insSampleUserMapper.delete(Wrappers.<InsSampleUser>lambdaQuery()
        .eq(InsSampleUser::getState,1)
        .eq(InsSampleUser::getSonLaboratory,orderState.getLaboratory())
        .eq(InsSampleUser::getUserId,orderState.getVerifyUser())
        .eq(InsSampleUser::getInsSampleId,orderState.getInsSampleId()));
                .eq(InsSampleUser::getState, 1)
                .eq(InsSampleUser::getSonLaboratory, orderState.getLaboratory())
                .eq(InsSampleUser::getUserId, orderState.getVerifyUser())
                .eq(InsSampleUser::getInsSampleId, orderState.getInsSampleId()));
        //删除生成的报告
        if (orderState.getLaboratory().equals("电路试验")) {
            List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery()
                    .eq(InsOrderFile::getType, 2)
                    .like(InsOrderFile::getFileName,"电路参数.docx")
                    .like(InsOrderFile::getFileName, "电路参数.docx")
                    .eq(InsOrderFile::getInsOrderId, insOrder.getId())
                    .eq(InsOrderFile::getInsSampleId, orderState.getInsSampleId())
                    .eq(InsOrderFile::getSonLaboratory, orderState.getLaboratory()));
@@ -1328,9 +1412,9 @@
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, insSample.getId()));
        List<Integer> productIds = insProducts.stream().map(InsProduct::getId).distinct().collect(Collectors.toList());
        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
                .eq(AuxiliaryOutputWorkingHours::getSample,insSample.getSampleCode())
                .in(AuxiliaryOutputWorkingHours::getInsProductId,productIds)
                .eq(AuxiliaryOutputWorkingHours::getNum,orderState.getNum()));
                .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode())
                .in(AuxiliaryOutputWorkingHours::getInsProductId, productIds)
                .eq(AuxiliaryOutputWorkingHours::getNum, orderState.getNum()));
        //  todo 企业微信消息推送@zss
        HashMap<String, Object> map = new HashMap<>();
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsProductServiceImpl.java
@@ -11,9 +11,11 @@
import com.yuanchu.mom.mapper.InsOrderMapper;
import com.yuanchu.mom.mapper.InsProductMapper;
import com.yuanchu.mom.mapper.InsSampleMapper;
import com.yuanchu.mom.mapper.WarehouseHistoryMapper;
import com.yuanchu.mom.pojo.InsOrder;
import com.yuanchu.mom.pojo.InsProduct;
import com.yuanchu.mom.pojo.InsSample;
import com.yuanchu.mom.pojo.WarehouseHistory;
import com.yuanchu.mom.service.InsProductService;
import com.yuanchu.mom.utils.QueryWrappers;
import com.yuanchu.mom.vo.InsOrderPlanVO;
@@ -33,6 +35,8 @@
    private InsOrderMapper insOrderMapper;
    private InsSampleMapper insSampleMapper;
    private WarehouseHistoryMapper warehouseHistoryMapper;
    @Override
    public int selectOrderManDay(Integer orderId) {
@@ -83,6 +87,7 @@
    @Override
    public void checkUpdate(Integer orderId, Integer state) {
        InsOrder insOrder = insOrderMapper.selectById(orderId);
        //通过
        if (state == 1) {
            List<String> list = new ArrayList<>();
            try {
@@ -99,29 +104,29 @@
            if (insProducts.stream().map(InsProduct::getId).collect(Collectors.toList()).equals(ids)) {
                //如果该检验单下的所有项目全部都撤销,那么这个单子也需要撤销
                insOrder.setState(3);
            }
            else {
                //出入库记录全部删掉
                warehouseHistoryMapper.delete(Wrappers.<WarehouseHistory>lambdaQuery().in(WarehouseHistory::getInsSampleId, collect));
                //全部撤销,样品和项目不能删掉,不然检验下单的撤销没有数据
            } else {
                List<InsProduct> products = insProductMapper.selectBatchIds(ids);
                //首先根据选择的项目id进行撤销项目
                updateBatchById(products.stream().map(insProduct -> {
                    insProduct.setState(0);
                    return insProduct;
                }).collect(Collectors.toList()));
                //如果该检验单某个样品下的项目全部都撤销了,那么这个样品也需要删掉
                //如果该检验单某个样品下的项目全部都撤销了,那么这个样品的出入库记录也需要删掉
                List<Integer> sampleIds = products.stream().map(InsProduct::getInsSampleId).distinct().collect(Collectors.toList());
                //项目删掉
                insProductMapper.deleteBatchIds(ids);
                for (Integer sampleId : sampleIds) {
                    Long count = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getInsSampleId, sampleId)
                            .eq(InsProduct::getState, 1));
                    if(count<=0){
                    if (count <= 0) {
                        //出入库记录全部删掉
                        warehouseHistoryMapper.delete(Wrappers.<WarehouseHistory>lambdaQuery().eq(WarehouseHistory::getInsSampleId, sampleId));
                        //对应的样品删掉
                        insSampleMapper.deleteById(sampleId);
                    }
                }
            }
            //insProductMapper.updateInspected(id);
        }
        //不通过
        insOrder.setIsRevocation(0);
        insOrder.setIsRevocation(state);
        insOrderMapper.updateById(insOrder);
    }
inspect-server/src/main/java/com/yuanchu/mom/service/impl/WarehouseServiceImpl.java
@@ -151,9 +151,11 @@
        if(tree.length < 4){
            throw new ErrorException("库位选择错误");
        }
        List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getEntrustCode, entrustCode));
        List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery()
                .ne(InsOrder::getState,3)//排除撤销的订单
                .eq(InsOrder::getEntrustCode, entrustCode));
        if(insOrders.size()!=1){
            throw new ErrorException("订单编号输入有误");
            throw new ErrorException("订单编号输入有误,或者该订单编号已经撤销");
        }
        List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
                .eq(InsSample::getSampleCode, sampleCode)
@@ -180,9 +182,11 @@
    @Override
    public int outWarehouse(String sampleCode, boolean a,String entrustCode) {
        List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getEntrustCode, entrustCode));
        List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery()
                .ne(InsOrder::getState,3)//排除撤销的订单
                .eq(InsOrder::getEntrustCode, entrustCode));
        if(insOrders.size()!=1){
            throw new ErrorException("订单编号输入有误");
            throw new ErrorException("订单编号输入有误,或者该订单编号已经撤销");
        }
        List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
                .eq(InsSample::getSampleCode, sampleCode)
inspect-server/src/main/resources/mapper/WarehouseMapper.xml
@@ -3,14 +3,13 @@
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.WarehouseMapper">
    <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.Warehouse">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="name" column="name" jdbcType="VARCHAR"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="name" column="name" jdbcType="VARCHAR"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
    </resultMap>
    <resultMap id="Warehouse" type="com.yuanchu.mom.dto.WarehouseDto">
@@ -24,10 +23,32 @@
        <result property="name" column="sName" jdbcType="VARCHAR"/>
        <result property="row" column="row" jdbcType="INTEGER"/>
        <result property="col" column="col" jdbcType="INTEGER"/>
        <collection property="warehouseCellList" resultMap="cell"/>
    </resultMap>
    <resultMap id="cell" type="com.yuanchu.mom.pojo.WarehouseCell">
        <id property="id" column="cId" jdbcType="INTEGER"/>
        <result property="row" column="crow" jdbcType="INTEGER"/>
        <result property="col" column="ccol" jdbcType="INTEGER"/>
    </resultMap>
    <select id="selectWarehouseList" resultMap="Warehouse">
        select w.id,w.name,ws.id sId,ws.name sName,ws.row,ws.col,ws.warehouse_id from warehouse w
        left join warehouse_shelf ws on w.id = ws.warehouse_id
        select w.id,
               w.name,
               ws.id   sId,
               ws.name sName,
               ws.row,
               ws.col,
               wc.id   cId,
               wc.row  crow,
               wc.col  ccol
        from warehouse w
                 left join warehouse_shelf ws on w.id = ws.warehouse_id
                 left join warehouse_cell wc on shelf_id = ws.id
                 left join
                 (select cell_id, count(*) num from warehouse_history group by cell_id) a on cell_id = wc.id
        where num is null
           or num % 2 = 0
        order by id, sId, crow, ccol
    </select>
</mapper>