1. 入库历史订单明细数据丢失
2. 库存信息响应问题
3. 出库明细新加客户信息
4. 库存明细增加查询条件
5. 出库修改物料来源
16个文件已修改
302 ■■■■■ 已修改文件
zy-asrs-admin/src/components/order/order/edit.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/components/order/order/orderOut.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/components/orderDetl/edit.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/components/orderLog/index.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/components/print/orderPrint/template/template1.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/views/base/zpalletBarcode/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/views/loc/locDetl/index.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MatController.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OrderDetlLogController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/Order.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderLog.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/ViewLocDetl.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/OrderDetlLogService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/OrderDetlLogServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/OrderTimer.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/components/order/order/edit.vue
@@ -144,20 +144,8 @@
                        optionLabelProp="label">
                    </a-select>
                </a-form-item>
                <!-- <a-form-item :label="formatMessage('db.man_order.order_no', '物流公司')" name="orderNo" >
                    <a-input v-model:value="formData.orderNo" />
                </a-form-item>
                <a-form-item :label="formatMessage('db.man_order.order_no', '快递单号')" name="orderNo">
                    <a-input v-model:value="formData.orderNo"/>
                </a-form-item>
                <a-form-item :label="formatMessage('db.man_order.order_no', '物流公司')" name="orderNo" >
                    <a-input v-model:value="formData.orderNo"/>
                </a-form-item>
                <a-form-item :label="formatMessage('db.man_order.order_no', '快递单号')" name="orderNo">
                    <a-input v-model:value="formData.orderNo"/>
                </a-form-item> -->
                <a-form-item :label="formatMessage('db.man_order.update_time', '订单明细')" name="orderDetl">
                    <OrderDetlComponent ref="orderDetlChild" v-if="open" />
                    <OrderDetlComponent ref="orderDetlChild" v-if="open" :ioModel="props.ioModel"/>
                </a-form-item>
                <a-form-item>
                    <a-button type="primary" html-type="submit" ref="submitButton"
zy-asrs-admin/src/components/order/order/orderOut.vue
@@ -410,7 +410,6 @@
                        style="width: 140px;margin-right: 10px;" show-search allowClear :options="orderTypeQueryList"
                        optionFilterProp="label" optionLabelProp="label">
                    </a-select>
                    <a-input-search v-model:value="searchInput" :placeholder="formatMessage('page.input', '请输入')"
                        style="width: 200px;" @search="onSearch" />
                </div>
@@ -473,9 +472,7 @@
                </template>
            </template>
        </a-table>
        <ShowOrderDetlComponent ref="showOrderDetlChild" />
    </div>
  <OrderPrint ref="printChild" />
</template>
zy-asrs-admin/src/components/orderDetl/edit.vue
@@ -13,6 +13,10 @@
const TABLE_KEY = 'table-locDetl';
const props = defineProps({
    ioModel: null
})
let tableData = ref([]);
let deleteDetlId = ref([]);
let orderId = ref(null);
@@ -226,7 +230,11 @@
function matQuery(condition) {
    matFetching.value = true;
    post('/api/mat/page', {
    let url = '/api/mat/page'
    if (props.ioModel == 2) {
        url = '/api/locs/mats/page'
    }
    post(url, {
        current: 1,
        pageSize: 10,
        condition: condition
zy-asrs-admin/src/components/orderLog/index.vue
@@ -194,7 +194,8 @@
const showDetl = (item) => {
  showOrderDetlChild.value.openDetl = true;
  showOrderDetlChild.value.orderId = item.id;
  showOrderDetlChild.value.orderId = item.orderNo;
}
const handleExport = async (intl) => {
zy-asrs-admin/src/components/print/orderPrint/template/template1.vue
@@ -24,12 +24,26 @@
<template>
    <div id="printOrder">
                <div>
                    <table class="contain" width="1200"
                        style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
            <table class="contain" width="1200" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
                <tr style="height: 40px">
                    <td align="center" colspan="2">客户名称</td>
                    <td align="center" colspan="2">联系电话</td>
                    <td align="center" colspan="3">快递单号</td>
                    <td align="center" colspan="4">收货地址</td>
                </tr>
                <template v-for="(item, index) in list" :key="index">
                    <tr style="height: 40px">
                        <td align="center" colspan="2">{{ item.customer }}</td>
                        <td align="center" colspan="2">{{ item.phone }}</td>
                        <td align="center" colspan="3">{{ item.logistics }}</td>
                        <td align="center" colspan="4">{{ item.address }}</td>
                    </tr>
                </template>
                        <tr style="height: 100px">
                            <td colspan="1" align="center" scope="col">订单号</td>
                            <td colspan="2" align="center" scope="col">{{orderNo}}</td>
                            <td class="barcode" colspan="9" align="center" scope="col">
                    <td class="barcode" colspan="8" align="center" scope="col" >
                                <img :src="globalState.url + '/api/code/auth?type=1&param=' + orderNo" width="70%;" />
                                <div style="letter-spacing: 2px;margin-top: 1px; text-align: center;">
                                    <span>{{ orderNo }} </span>
zy-asrs-admin/src/views/base/zpalletBarcode/index.vue
zy-asrs-admin/src/views/loc/locDetl/index.vue
@@ -20,6 +20,7 @@
  matnr: null,
  orderNo: null,
  batch: null,
  tagId: null,
})
const editChild = ref(null)
@@ -95,6 +96,13 @@
        width: 140,
        ellipsis: true,
        ...getColumnSearchProps('model'),
  },
  {
    title: formatMessage('db.man_loc_detl.model', '品类'),
    dataIndex: 'tagId$',
    width: 140,
    ellipsis: true,
    ...getColumnSearchProps('tagId$'),
  },
  {
        title: formatMessage('db.man_loc_detl.dewell', '入库时间'),
@@ -195,15 +203,6 @@
        width: 140,
      })
    })
    // tmp.push({
    //   title: formatMessage('common.operation', '操作'),
    //   name: 'oper',
    //   dataIndex: 'oper',
    //   key: 'oper',
    //   width: 140,
    // })
    state.columns = tmp;
  } else if (result.code === 401) {
    message.error(result.msg);
@@ -310,12 +309,20 @@
          style="width: 140px;margin-right: 10px;" />
        <a-input v-model:value="searchParam.matnr" :placeholder="formatMessage('page.locDetl.matnr.input', '请输入商品编号')"
          style="width: 140px;margin-right: 10px;" />
        <a-input v-model:value="searchParam.maktx" :placeholder="formatMessage('page.locDetl.maktx.input', '请输入商品名称')"
          style="width: 140px;margin-right: 10px;" />
        <a-input v-model:value="searchParam.orderNo"
          :placeholder="formatMessage('page.locDetl.orderNo.input', '请输入订单号')"
          style="width: 140px;margin-right: 10px;" />
        <a-input v-model:value="searchParam.batch" :placeholder="formatMessage('page.locDetl.batch.input', '请输入批号')"
          style="width: 140px;margin-right: 10px;" />
        <a-select v-model:value="searchParam.tagId" :placeholder="formatMessage('page.locDetl.orderNo.input', '请选择品类')" :options="[
          { label: '默认分类', value: 10 },{ label: '机油', value: 11 }, { label: '变速箱油', value: 17 }, { label: '火花塞', value: 18 },
          { label: '养护品', value: 25 },{ label: '油漆耗材', value: 26 }, { label: '球头摆臂', value: 27 }, { label: '砂纸类', value: 31 },
          { label: '菜瓜布', value: 32 }, { label: '遮蔽类', value: 33 }, { label: '抛光类', value: 34 }, { label: '除尘类', value: 35 },
          { label: '漏斗类', value: 36 }, { label: '防护类', value: 37 }, { label: '烤房保养类', value: 38 }, { label: '调漆罐', value: 39 },
          { label: '喷枪', value: 40 }, { label: '费斯托系列', value: 41 },]" style="width: 140px;margin-right: 10px;">
        </a-select>
        <a-input-search v-model:value="searchInput" :placeholder="formatMessage('page.input', '请输入')"
          style="width: 200px;" @search="onSearch" />
      </div>
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MatController.java
@@ -9,19 +9,17 @@
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.asrs.entity.MatField;
import com.zy.asrs.wms.asrs.entity.MatFieldValue;
import com.zy.asrs.wms.asrs.entity.Tag;
import com.zy.asrs.wms.asrs.entity.*;
import com.zy.asrs.wms.asrs.entity.template.MatTemplate;
import com.zy.asrs.wms.asrs.service.MatFieldService;
import com.zy.asrs.wms.asrs.service.MatFieldValueService;
import com.zy.asrs.wms.asrs.service.TagService;
import com.zy.asrs.wms.asrs.service.impl.LocDetlServiceImpl;
import com.zy.asrs.wms.common.annotation.CacheData;
import com.zy.asrs.wms.common.annotation.OperationLog;
import com.zy.asrs.wms.common.domain.BaseParam;
import com.zy.asrs.wms.common.domain.KeyValVo;
import com.zy.asrs.wms.common.domain.PageParam;
import com.zy.asrs.wms.asrs.entity.Mat;
import com.zy.asrs.wms.asrs.service.MatService;
import com.zy.asrs.wms.system.controller.BaseController;
import com.zy.asrs.wms.utils.ExcelUtil;
@@ -33,6 +31,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/api")
@@ -46,6 +45,8 @@
    private MatFieldValueService matFieldValueService;
    @Autowired
    private TagService tagService;
    @Autowired
    private LocDetlServiceImpl locDetlService;
    @PreAuthorize("hasAuthority('asrs:mat:list')")
    @PostMapping("/mat/page")
@@ -70,6 +71,44 @@
        return R.ok().add(data);
    }
    /**
     * @author Ryan
     * @date 2025/7/3
     * @description: 获取可出库物料信息
     * @version 1.0
     */
    @PreAuthorize("hasAuthority('asrs:mat:list')")
    @PostMapping("/locs/mats/page")
    public R getOutPage(@RequestBody Map<String, Object> param) {
        List<LocDetl> locDetls = locDetlService.list(new LambdaQueryWrapper<LocDetl>().select(LocDetl::getMatId));
        if (locDetls.isEmpty()) {
            return R.ok();
        }
        /**获取存物料信息*/
        Set<Long> ids = locDetls.stream().map(LocDetl::getMatId).collect(Collectors.toSet());
        BaseParam baseParam = buildParam(param, BaseParam.class);
        PageParam<Mat, BaseParam> pageParam = new PageParam<>(baseParam, Mat.class);
        QueryWrapper<Mat> queryWrapper = pageParam.buildWrapper(true);
        queryWrapper.orderByDesc("utiliz");
        queryWrapper.in("id", ids);
        PageParam<Mat, BaseParam> page = matService.page(pageParam, queryWrapper);
        JSONObject data = JSON.parseObject(JSON.toJSONString(page));
        List<Mat> records = page.getRecords();
        data.put("records", records);
        for (Mat mat : records) {
            List<MatFieldValue> list = matFieldValueService.list(new LambdaQueryWrapper<MatFieldValue>()
                    .eq(MatFieldValue::getMatId, mat.getId()));
            mat.syncField(list);
        }
        return R.ok(data);
    }
    @PreAuthorize("hasAuthority('asrs:mat:list')")
    @PostMapping("/mat/list")
    @CacheData(tableName = {"man_mat"})
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OrderDetlLogController.java
@@ -49,7 +49,7 @@
    @PreAuthorize("hasAuthority('asrs:orderDetl:list')")
    @GetMapping("/orderDetlLog/orderId/{orderId}")
    @CacheData(tableName = {"man_order_detl_log"})
    public R list(@PathVariable("orderId") Long orderId) {
    public R list(@PathVariable("orderId") String orderId) {
        return R.ok().add(orderDetlLogService.getOrderDetlByOrderId(orderId));
    }
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/Order.java
@@ -66,6 +66,9 @@
    @ApiModelProperty(value= "单据状态")
    private Long orderSettle;
    @ApiModelProperty("客户名称")
    private String customer;
    @ApiModelProperty("物流名称")
    private String logisticsName;
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderLog.java
@@ -39,6 +39,10 @@
    @TableId(value = "id", type = IdType.INPUT)
    private Long id;
    @ApiModelProperty("原单ID")
    private Long orderId;
    /**
     * 订单编号
     */
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/ViewLocDetl.java
@@ -11,6 +11,7 @@
import com.zy.asrs.framework.common.SpringUtils;
import com.zy.asrs.wms.asrs.service.LocService;
import com.zy.asrs.wms.asrs.service.MatService;
import com.zy.asrs.wms.asrs.service.TagService;
import com.zy.asrs.wms.system.entity.Host;
import com.zy.asrs.wms.system.entity.User;
import com.zy.asrs.wms.system.service.HostService;
@@ -85,11 +86,23 @@
    @ApiModelProperty(value= "所属机构")
    private Long hostId;
    @ApiModelProperty("物料名称")
    private String maktx;
    @ApiModelProperty("规格")
    private String specs;
    @ApiModelProperty("型号")
    private String model;
    /**
     * 状态 1: 正常  0: 禁用
     */
    @ApiModelProperty(value= "状态 1: 正常  0: 禁用  ")
    private Integer status;
    @ApiModelProperty("分类标识")
    private Long tagId;
    /**
     * 是否删除 1: 是  0: 否
@@ -184,12 +197,22 @@
        return null;
    }
    @Delegate(types = Mat.class)
    public Mat getMatId$(){
        MatService service = SpringUtils.getBean(MatService.class);
        Mat mat = service.getById(this.matId);
        return mat;
    public String getTagId$() {
        TagService tagService = SpringUtils.getBean(TagService.class);
        Tag byId = tagService.getById(this.tagId);
        if (!Cools.isEmpty(byId)){
            return byId.getName();
    }
        return null;
    }
//    @Delegate(types = Mat.class)
//    public Mat getMatId$(){
//        MatService service = SpringUtils.getBean(MatService.class);
//        Mat mat = service.getById(this.matId);
//        return mat;
//    }
    public String getDewell$() {
        return DateUtils.diff(new Date(), createTime) + "天";
@@ -278,56 +301,56 @@
    }
    //动态扩展字段
    public transient Map<String, Object> dynamicFields = new HashMap<>();
//    public transient Map<String, Object> dynamicFields = new HashMap<>();
    @JsonAnyGetter
    public Map<String,Object> getDynamicFields() {
        return dynamicFields;
    }
    public void syncField(List<LocDetlField> list) {
        ArrayList<String> keys = new ArrayList<>();
        Field[] fields = this.getClass().getFields();
        for (Field field : fields) {
            keys.add(field.getName());
        }
        Map<String, Object> dynamicFields = new HashMap<>();
        for (LocDetlField locDetlField : list) {
            if (keys.contains(locDetlField.getName())) {
                continue;
            }
            dynamicFields.put(locDetlField.getName(), locDetlField.getValue());
        }
        this.dynamicFields = dynamicFields;
    }
    public void syncFieldMap(Map<String, Object> map) {
        ArrayList<String> keys = new ArrayList<>();
        Field[] fields = this.getClass().getDeclaredFields();
        for (Field field : fields) {
            keys.add(field.getName());
        }
        keys.add("detlId");
        Map<String, Object> dynamicFields = new HashMap<>();
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            if (keys.contains(entry.getKey())) {
                continue;
            }
            dynamicFields.put(entry.getKey(), entry.getValue());
        }
        this.dynamicFields = dynamicFields;
    }
    public String getFieldString(String key) {
        return dynamicFields.get(key).toString();
    }
    public void setField(String key, Object value) {
        dynamicFields.put(key, value);
    }
//    @JsonAnyGetter
//    public Map<String,Object> getDynamicFields() {
//        return dynamicFields;
//    }
//
//    public void syncField(List<LocDetlField> list) {
//        ArrayList<String> keys = new ArrayList<>();
//        Field[] fields = this.getClass().getFields();
//        for (Field field : fields) {
//            keys.add(field.getName());
//        }
//
//        Map<String, Object> dynamicFields = new HashMap<>();
//        for (LocDetlField locDetlField : list) {
//            if (keys.contains(locDetlField.getName())) {
//                continue;
//            }
//            dynamicFields.put(locDetlField.getName(), locDetlField.getValue());
//        }
//
//        this.dynamicFields = dynamicFields;
//    }
//
//    public void syncFieldMap(Map<String, Object> map) {
//        ArrayList<String> keys = new ArrayList<>();
//        Field[] fields = this.getClass().getDeclaredFields();
//        for (Field field : fields) {
//            keys.add(field.getName());
//        }
//        keys.add("detlId");
//
//        Map<String, Object> dynamicFields = new HashMap<>();
//        for (Map.Entry<String, Object> entry : map.entrySet()) {
//            if (keys.contains(entry.getKey())) {
//                continue;
//            }
//            dynamicFields.put(entry.getKey(), entry.getValue());
//        }
//
//        this.dynamicFields = dynamicFields;
//    }
//
//    public String getFieldString(String key) {
//        return dynamicFields.get(key).toString();
//    }
//
//    public void setField(String key, Object value) {
//        dynamicFields.put(key, value);
//    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/OrderDetlLogService.java
@@ -7,6 +7,6 @@
public interface OrderDetlLogService extends IService<OrderDetlLog> {
    List<OrderDetlLog> getOrderDetlByOrderId(Long orderId);
    List<OrderDetlLog> getOrderDetlByOrderId(String orderId);
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java
@@ -44,13 +44,13 @@
        PageParam<ViewLocDetl, BaseParam> result = viewLocDetlMapper.selectPage(pageParam, buildWrapper);
        //解析动态字段
        JSONObject data = JSON.parseObject(JSON.toJSONString(result));
        List<ViewLocDetl> records = result.getRecords();
        data.put("records", records);
        for (ViewLocDetl locDetl : records) {
            Map<String, Object> resultMap = viewLocDetlMapper.getById(locDetl.getId());
            locDetl.syncFieldMap(resultMap);
        }
//        JSONObject data = JSON.parseObject(JSON.toJSONString(result));
//        List<ViewLocDetl> records = result.getRecords();
//        data.put("records", records);
//        for (ViewLocDetl locDetl : records) {
//            Map<String, Object> resultMap = viewLocDetlMapper.getById(locDetl.getId());
//            locDetl.syncFieldMap(resultMap);
//        }
        return result;
    }
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/OrderDetlLogServiceImpl.java
@@ -23,8 +23,8 @@
    private OrderDetlFieldLogService orderDetlFieldLogService;
    @Override
    public List<OrderDetlLog> getOrderDetlByOrderId(Long orderId) {
        List<OrderDetlLog> orderDetlLogs = this.list(new LambdaQueryWrapper<OrderDetlLog>().eq(OrderDetlLog::getOrderId, orderId));
    public List<OrderDetlLog> getOrderDetlByOrderId(String orderId) {
        List<OrderDetlLog> orderDetlLogs = this.list(new LambdaQueryWrapper<OrderDetlLog>().eq(OrderDetlLog::getOrderNo, orderId));
        for (OrderDetlLog orderDetlLog : orderDetlLogs) {
            List<OrderDetlFieldLog> list = orderDetlFieldLogService.list(new LambdaQueryWrapper<OrderDetlFieldLog>().eq(OrderDetlFieldLog::getDetlId, orderDetlLog.getId()));
            orderDetlLog.syncField(list);
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/OrderTimer.java
@@ -31,27 +31,26 @@
    @Autowired
    private OrderDetlFieldLogService orderDetlFieldLogService;
    @Scheduled(cron = "0/3 * * * * ? ")
    @Scheduled(cron = "0/13 * * * * ? ")
    @Transactional(rollbackFor = Exception.class)
    public void orderToHistory() {
        InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());
        try {
            List<Order> list = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getOrderSettle, OrderSettleType.COMPLETE.val()));
            if (list.isEmpty()) {
                return;
            }
            for (Order order : list) {
                //转历史档
                OrderLog orderLog = new OrderLog();
                orderLog.sync(order);
            orderLog.setOrderId(order.getId());
                orderLog.setId(null);
                if (!orderLogService.save(orderLog)) {
                    throw new CoolException("订单转历史档失败");
                }
                //订单明细转历史档
                List<OrderDetl> orderDetls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderId, order.getId()));
            List<OrderDetl> orderDetls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>()
                    .eq(OrderDetl::getOrderId, order.getId()));
                for (OrderDetl orderDetl : orderDetls) {
                    OrderDetlLog orderDetlLog = new OrderDetlLog();
                    orderDetlLog.sync(orderDetl);
@@ -85,13 +84,6 @@
                if (!orderService.removeById(order.getId())) {
                    throw new CoolException("删除订单失败");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }finally {
            InterceptorIgnoreHelper.clearIgnoreStrategy();
        }
    }