skyouc
2025-02-27 013c9ed47408e0c584a05663afee2bb47a39d50d
#优化
波次预览显示优化
大屏1280*720兼容
11个文件已修改
322 ■■■■ 已修改文件
construction-data/src/components/datav/digitalFlop.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
construction-data/src/components/datav/index.vue 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
construction-data/src/components/datav/topHeader.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/components/orderOut/orderOutWavePreview/index.vue 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OutController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/dto/MergePreviewDto.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/dto/MergePreviewResultDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewLocDetlMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
construction-data/src/components/datav/digitalFlop.vue
@@ -27,8 +27,8 @@
        matnr: '物料编号',
        batch: '批号',
        waveNo: '波次',
        anfme: '总需求数量',
        workQty: '剩余需求数量',
        anfme: '总需求',
        workQty: '剩余需求',
      }
    }
  },
@@ -104,19 +104,27 @@
  @media screen and (max-width: 1280px) {
    #digital-flop{
      .digital-flop-title {
        padding: 10px;
        font-size: 14px;
      }
      .digital-flop-item {
        padding: 10px 0;
      .digital-flop {
        .cell-item {
          font-size: 12px;
          height: unset;
        .digital-flop-title {
          padding: 5px 0;
          text-align: center;
          min-width: 36px;
          font-size: 9px;
        }
        .digital-flop {
          .cell-item {
            font-size: 9px;
            height: unset;
          }
        }
      }
    }
  }
construction-data/src/components/datav/index.vue
@@ -4,14 +4,14 @@
      <top-header/>
      <template>
        <el-row>
          <el-col :span="15">
          <el-col :span="13">
            <el-row class="header-left-task" type="flex" align="center" >
              <el-col v-for="(task, index) in tasks" :key="index" >
                <el-row type="flex" align="center" justify="center" @click.native="borderClick(task)">
                  <dv-border-box-2>
                    <el-card class="header-card" >
                      <el-row>
                        <el-col :span="4" v-for="(item, index) in Object.keys(waveLabels)" :key="index">
                        <el-col class="heaer-label-column" v-for="(item, index) in Object.keys(waveLabels)" :key="index">
                          <div class="header-card-label" >{{ waveLabels[item] }}</div>
                          <div class="header-card-val" >{{ task[item] }}</div>
                        </el-col>
@@ -22,13 +22,11 @@
              </el-col>
            </el-row>
            <el-row class="detl-info-row">
              <dv-border-box-2>
                <el-card>
                  <el-table :data="mergeTaskDetl" class="talbe-matnr" @row-click="selectRow">
                    <el-table-column v-for="(item,index) in Object.keys(detlLabels)" :prop="item" :label="detlLabels[item]" :key="index"/>
                  </el-table>
                </el-card>
              </dv-border-box-2>
              <el-card class="detl-info-card">
                <el-table :data="mergeTaskDetl" class="table-matnr" @row-click="selectRow">
                  <el-table-column v-for="(item,index) in Object.keys(detlLabels)" :prop="item" :label="detlLabels[item]" :key="index"/>
                </el-table>
              </el-card>
            </el-row>
            <el-row class="pick-order-detl">
              <dv-border-box11 title="拣货订单明细" class="detl-box-border">
@@ -41,16 +39,16 @@
              </dv-border-box11>
            </el-row>
          </el-col>
          <el-col :span="9">
          <el-col :span="11">
              <el-row class="order-box-row">
                <dv-border-box-11 title="订单完成情况" class="order-box">
                  <el-table :data="orders" v-if="orders.length > 0" class="order-table">
                    <el-table-column v-for="(item, dex) in Object.keys(orderStatus)" :prop="item" :label="orderStatus[item]" :key="dex">
                    <el-table-column v-for="(item, dex) in Object.keys(orderStatus)" :prop="item" :label="orderStatus[item]" :key="dex" >
                      <template slot-scope="scope">
                        <el-popover
                          placement="right"
                          width="300"
                          trigger="manual"
                          class="popover-order"
                          v-model="visible"
                          v-if="item === 'action'" >
                          <template>
@@ -58,13 +56,13 @@
                              <span>选择目标发货区</span>
                              <el-divider/>
                              <el-row :gutter="15">
                                <el-col v-for="(palt, index) in platforms" :key="index" class="platform" :span="7" @click.native="bindShipping(palt, scope)">
                                  <div>{{palt.platformNo}}</div>
                                <el-col v-for="(palt, index) in platforms" :key="index" :span="7" @click.native="bindShipping(palt, scope)">
                                  <div class="platform" >{{palt.platformNo}}</div>
                                </el-col>
                              </el-row>
                            </div>
                          </template>
                          <el-button slot="reference" type="text" @click.native.prevent="print(scope.$index, orders)">打印明细</el-button>
                          <el-button slot="reference" type="text" @click.native.prevent="print(scope.$index, orders)" class="btnPrint">打印明细</el-button>
                        </el-popover>
                        <div v-else class="ship-order-list">
                          {{scope.row[item]}}
@@ -431,15 +429,7 @@
        margin: 5px 0;
      }
      .platform {
        display: flex;
        align-items: center;
        justify-content: center;
        height: 80px;
        background-color: #03d3ec;
        margin: 5px;
        text-align: center;
      }
      .pick-order-detl {
        padding: 0 15px;
@@ -524,22 +514,31 @@
          text-align: center;
          padding: 15px;
          .header-card-label {
            font-size: 25px;
            font-style: oblique;
            padding: 5px;
            color: white;
          }
          .header-card-val {
            font-size: 20px;
            padding: 10px;
            color: orange;
          .heaer-label-column {
            min-width: 170px;
            width: auto;
            .header-card-label {
              font-size: 25px;
              font-style: oblique;
              padding: 5px;
              color: white;
            }
            .header-card-val {
              font-size: 20px;
              padding: 10px;
              color: orange;
            }
          }
        }
      }
      .detl-info-row {
        padding: 0 15px;
        .detl-info-card {
        }
      }
      .order-box-row {
@@ -553,6 +552,23 @@
            width: 74vh;
            padding-top: 65px;
            height: 275px;
            .popover-order {
              width: 300px;
              .platform {
                display: flex;
                align-items: center;
                justify-content: center;
                height: 80px;
                background-color: #03d3ec;
                margin: 5px;
                text-align: center;
              }
            }
            .ship-order-list {
              font-size: 18px; color: white;
@@ -620,7 +636,7 @@
        top: 0px !important;
      }
      .talbe-matnr {
      .table-matnr {
        height: 26vh;
      }
@@ -667,23 +683,58 @@
@media screen and (max-width: 1281px)  {
  #data-view {
    .header-left-task {
      .header-card {
        margin: 5px;height: 90px;
        padding: 5px;
      padding: 5px 15px 5px 15px;
        .header-card-label {
          font-size: 18px;
          padding: 5px;
      .header-card {
        margin: 2px;
        height: 70px;
        padding: 2px;
        .el-card__body {
          padding: 5px 20px;
        }
        .header-card-val {
          font-size: 14px;
        .heaer-label-column{
          max-width: 130px;
          min-width: 75px;
          width: auto;
          .header-card-label {
            font-size: 13px;
            padding: 5px;
          }
          .header-card-val {
            font-size: 11px;
          }
        }
      }
    }
    .detl-info-row {
      padding: 0 15px;
      .detl-info-card {
          padding: 0;
        .el-card__body {
          padding: 8px;
        }
      }
      .el-table {
        th.el-table__cell>.cell {
          text-align: center;
        }
        .el-table__cell {
          padding: 5px 0;
          text-align: center;
          width: auto;
        }
      }
    }
    .order-box-row {
      width: 58vh;
      width: 68vh;
      height: 28vh;
      .order-box {
@@ -694,37 +745,47 @@
          padding-top: 65px;
          height: 275px;
          .btnPrint {
            font-size: 9px;
          }
          .ship-order-list {
            font-size: 14px;
            font-size: 10px;
          }
          .el-table__cell {
            padding: 0;
          }
        }
      }
      .empty-padding {
        padding-top: 65px;
        width: 30px;
        height: 30px;
      }
    }
    .talbe-matnr {
      height: 20vh;
    .table-matnr {
      height: 15vh;
    }
    .el-table .cell {
      font-size: 16px !important;
      font-size: 10px !important;
    }
    .pick-order-detl {
      padding: 0 10px;
      .detl-box-border {
        height: 39vh;
        height: 49vh;
        .detl-box-padding {
          height: 65px
        }
        .order-detl-list {
          height: 23vh;
          height: 38vh;
        }
      }
    }
construction-data/src/components/datav/topHeader.vue
@@ -83,11 +83,25 @@
  }
}
@media only screen and (max-width: 1280px){
@media only screen and (max-width: 1281px){
  #top-header {
    height: auto;
    margin-bottom: 5px;
    .header-center-decoration {
      width: 40%;
      height: 40px;
      margin-top: 20px;
    }
    .header-left-decoration, .header-right-decoration {
      width: 25%;
      height: 40px;
    }
    .center-title {
      font-size: 24px;
      top: 10px;
      font-size: 18px;
      font-weight: bold;
    }
  }
zy-asrs-admin/src/components/orderOut/orderOutWavePreview/index.vue
@@ -61,6 +61,16 @@
            return customColSpanProps(index)
        },
    },
    {
        title: '库位类型',
        dataIndex: 'type',
        width: 110,
        ellipsis: true,
        ...getColumnSearchProps('type'),
        customCell: (_, index) => {
            return customColSpanProps(index)
        },
    }
];
const state = reactive({
@@ -102,11 +112,10 @@
        tmp.push({
            title: formatMessage('db.man_order_detl.anfme', '数量'),
            dataIndex: 'anfme',
            width: 140,
            width: 60,
            ellipsis: true,
            fixed: 'right',
        })
        tmp.push({
            title: formatMessage('db.man_order_detl.locNo', '出库库位'),
            dataIndex: 'locNo',
@@ -243,20 +252,20 @@
                        tableDataTmp.push(dataTmp);
                    }
                    if (isused > 0) {
                        let dataTmp = JSON.parse(JSON.stringify(item));
                        dataTmp.locId = null;
                        dataTmp.locNo = null;
                        dataTmp.locDetlId = null;
                        dataTmp.typeId = item.typeId;
                        dataTmp.workQty = item.workQty;
                        dataTmp.anfme = isused;
                        dataTmp.key = idx;
                        dataTmp.operationPort = defaultOperationPort;
                    // if (isused > 0) {
                    //     let dataTmp = JSON.parse(JSON.stringify(item));
                    //     dataTmp.locId = null;
                    //     dataTmp.locNo = null;
                    //     dataTmp.locDetlId = null;
                    //     dataTmp.typeId = item.typeId;
                    //     dataTmp.workQty = item.workQty;
                    //     dataTmp.anfme = isused;
                    //     dataTmp.key = idx;
                    //     dataTmp.operationPort = defaultOperationPort;
                        tableDataTmp.push(dataTmp);
                        count++;
                    }
                    //     tableDataTmp.push(dataTmp);
                    //     count++;
                    // }
                }
                colSpan[idx] = count;
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OutController.java
@@ -110,6 +110,7 @@
            double anfme = waveDetl.getAnfme() - waveDetl.getWorkQty();
            dto.setMatnr(waveDetl.getMatnr());
            dto.setBatch(waveDetl.getBatch());
            dto.setStatus(0);
            dto.setWorkQty(0.0);
            dto.setAnfme(anfme);
            dto.setOrderIds(orderIds);
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/dto/MergePreviewDto.java
@@ -24,6 +24,12 @@
    private List<FieldParam> fieldParams;
    private String fieldParamsEncode;
    /**
     *  1: 已完成
     *  2: 部分完成
     *  0: 未完成
     */
    private Integer status;
    //动态扩展字段
    public transient Map<String, Object> dynamicFields = new HashMap<>();
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/dto/MergePreviewResultDto.java
@@ -18,6 +18,11 @@
    private Double anfme;
    //本次取货数量
    private Double fetchQty;
    //库位类型
    private String type;
    private List<Long> orderIds;
    private List<MergePreviewResultLocDto> locs;
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.datatype.jsr310.DecimalUtils;
import com.mysql.cj.util.StringUtils;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.asrs.entity.dto.*;
@@ -22,6 +23,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -555,12 +557,17 @@
        List<MergePreviewResultDto> resultDtos = new ArrayList<>();
        //优先查询平库数据
        param.forEach(pars -> {
            if (pars.getStatus() == 1) {
                return;
            }
            List<MergePreviewResultLocDto> locDtos = new ArrayList<>();
            MergePreviewResultDto resultDto = new MergePreviewResultDto();
            resultDto.sync(pars);
            resultDto.setOrderIds(pars.getOrderIds());
            //总需求数量
            resultDto.setAnfme(pars.getAnfme());
            resultDto.setLocs(locDtos);
            //查询平库中符合条件的库存
            List<LocDetl> locs = locDetlService.queryFlatStock(pars.getMatnr(), pars.getBatch(), pars.getFieldParams());
            if (!locs.isEmpty()) {
                double anfme = pars.getAnfme() - pars.getWorkQty();
@@ -578,44 +585,61 @@
                    locDto.setLocNo(detl.getLocNo());
                    locDto.setTypeId(LocAreaTypeSts.LOC_AREA_TYPE_FLAT.id);
                    locDto.setLocDetlId(detl.getId());
                    locDto.setAnfme(detl.getAnfme());
                    locDto.setWorkQty(detl.getWorkQty());
                    locDtos.add(locDto);
                    //库位实际可用数量
                    double surplusQty = detl.getAnfme() - detl.getWorkQty();
                    if (surplusQty <= 0) {
                        continue;
                    }
                    //波次数量减去库位可用数量后,盈余数量
                    anfme = anfme - surplusQty;
                    if (anfme > 0) {
                        locDto.setAnfme(detl.getAnfme());
                        locDto.setWorkQty(surplusQty);
                        //当前可使用数量
                        resultDto.setFetchQty(surplusQty);
                        //余下需求数量
                        pars.setStatus(2);
                        pars.setWorkQty(pars.getWorkQty() + surplusQty);
                        pars.setAnfme(anfme);
                    } else {
                        locDto.setAnfme(pars.getAnfme() - pars.getWorkQty());
                        locDto.setWorkQty(pars.getAnfme() - pars.getWorkQty());
                        //当前使用数量
                        resultDto.setFetchQty(pars.getAnfme());
                        //余下需求
                        pars.setWorkQty(pars.getWorkQty() + pars.getAnfme());
                        pars.setStatus(1);
                        pars.setAnfme(0.0);
                        break;
                    }
                }
                //保存出库数量(平库)
                pars.setWorkQty(pars.getAnfme() - pars.getWorkQty() - anfme);
                resultDto.setOtherLocs(new ArrayList<>());
                if (!Objects.isNull(resultDto.getFetchQty()) && !(new BigDecimal(resultDto.getFetchQty()).compareTo(new BigDecimal("0.00")) == 0)) {
                    resultDto.setOtherLocs(new ArrayList<>());
                resultDto.setAnfme(pars.getAnfme());
                    resultDto.setType(LocAreaTypeSts.LOC_AREA_TYPE_FLAT.desc);
                resultDtos.add(resultDto);
                    resultDtos.add(resultDto);
                }
            }
        });
        //平库查询完成后,再查询TCU
        for (MergePreviewDto dto : param) {
            Double anfme = dto.getAnfme() - dto.getWorkQty();
            //减去平库数量后,小于等于0,跳出处理
            if (anfme <= 0) {
            //单据已完成,跳出
            if (dto.getStatus() == 1) {
                continue;
            }
//            Double anfme = dto.getAnfme() - dto.getWorkQty();
//            //减去平库数量后,小于等于0,跳出处理
//            if (anfme <= 0) {
//                continue;
//            }
            List<LocDetl> locDetls = locDetlService.queryStock(dto.getMatnr(), dto.getBatch(), dto.getFieldParams(), sortParams);
            if (locDetls.isEmpty()) {
                MergePreviewResultDto resultDto = new MergePreviewResultDto();
                resultDto.sync(dto);
                resultDto.setLocs(new ArrayList<>());
                resultDto.setType(LocAreaTypeSts.LOC_AREA_TYPE_UTC.desc);
                resultDto.setOrderIds(dto.getOrderIds());
                resultDto.setAnfme(dto.getAnfme());
                resultDtos.add(resultDto);
@@ -627,7 +651,7 @@
            MergePreviewResultDto resultDto = new MergePreviewResultDto();
            resultDto.sync(dto);
            resultDto.setOrderIds(dto.getOrderIds());
//            Double anfme = dto.getAnfme();
            Double anfme = dto.getAnfme();
            resultDto.setLocs(locDtos);
            for (LocDetl locDetl : locDetls) {
                Loc loc = locService.getById(locDetl.getLocId());
@@ -676,6 +700,8 @@
            resultDto.setAnfme(dto.getAnfme());
            resultDto.setType(LocAreaTypeSts.LOC_AREA_TYPE_UTC.desc);
            resultDtos.add(resultDto);
        }
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewLocDetlMapper.java
@@ -15,7 +15,7 @@
@Repository
public interface ViewLocDetlMapper extends BaseMapper<ViewLocDetl> {
    List<Map<String, Object>> queryStock(String matnr, String batch, List<FieldParam> param, @Param("sortParam") List<FieldSortParam> sortParam);
    List<Map<String, Object>> queryStock(String matnr, String batch, List<FieldParam> param, @Param("sortParam") List<FieldSortParam> sortParam, @Param("type")Long type);
    List<Map<String, Object>> getList(String matnr, String batch, List<FieldParam> param, @Param("sortParam") List<FieldSortParam> sortParam);
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java
@@ -103,7 +103,7 @@
    @Override
    public List<LocDetl> queryStock(String matnr, String batch, List<FieldParam> param, List<FieldSortParam> sortParam) {
        List<Map<String, Object>> list = viewLocDetlMapper.queryStock(matnr, batch, param, sortParam);
        List<Map<String, Object>> list = viewLocDetlMapper.queryStock(matnr, batch, param, sortParam, LocAreaTypeSts.LOC_AREA_TYPE_UTC.id);
        List<LocDetl> locDetlsSort = resortDetls(list);
        return locDetlsSort;
    }
zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml
@@ -9,7 +9,7 @@
        FROM
        view_man_loc_detl
        ) t
        WHERE t.deleted = 0 AND t.freeze = 0
        WHERE t.deleted = 0 AND t.freeze = 0 AND type_id = #{type}
        <if test="matnr != null and matnr != ''">
            AND t.matnr = #{matnr}
        </if>