skyouc
23 小时以前 ccb810bdcabb3a10b7463acbdb0aa66c44d9c0bc
对接ERP基础接口
7个文件已修改
2个文件已添加
292 ■■■■ 已修改文件
rsf-admin/.env 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/dashboard/index.jsx 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReceiveMsgController.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OrderParams.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/QueryOrderParam.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/WkOrderDto.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocPreviewController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/.env
@@ -1,3 +1,3 @@
VITE_BASE_IP=192.168.4.151
VITE_BASE_IP=127.0.0.1
# VITE_BASE_IP=47.76.147.249
VITE_BASE_PORT=8080
rsf-admin/src/page/dashboard/index.jsx
@@ -92,6 +92,8 @@
    const getDashBoardHeader = async () => {
        await request.post('/asnOrder/dashbord/header').then(res => {
            const { code, msg, data } = res?.data;
            console.log(code);
            if (code === 200) {
                setStatistic(data);
            } else {
@@ -174,7 +176,7 @@
                        <CardWithIcon
                            icon={SensorOccupiedIcon}
                            subtitle={translate('page.dashboard.header.outStockQty')}
                            title={`${statistic?.membersTotalQua}`}
                            title={`${statistic?.outAnf}`}
                            type={"out"}
                            statistic={statistic}
                        />
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReceiveMsgController.java
@@ -1,19 +1,21 @@
package com.vincent.rsf.server.api.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.api.controller.params.BaseMatParms;
import com.vincent.rsf.server.api.controller.params.OrderParams;
import com.vincent.rsf.server.api.controller.params.QueryOrderParam;
import com.vincent.rsf.server.api.service.ReceiveMsgService;
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.common.utils.ExcelUtil;
import com.vincent.rsf.server.manager.entity.Matnr;
import com.vincent.rsf.server.manager.entity.Loc;
import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate;
import com.vincent.rsf.server.manager.entity.excel.MatnrsTemplate;
import com.vincent.rsf.server.manager.service.MatnrGroupService;
import com.vincent.rsf.server.manager.service.MatnrService;
import com.vincent.rsf.server.system.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -24,6 +26,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
@@ -64,6 +67,23 @@
        }
    }
    /**
     * @author Ryan
     * @date 2025/8/15
     * @description: DO单同步
     * @version 1.0
     */
    @ApiOperation("出库通知单(DO单同步)")
    @PostMapping("/sync/delivery")
    public R syncDelivery(@RequestBody List<OrderParams> orders) {
        if (!receiveMsgService.syncPurchasee(orders)) {
            return R.error("保存失败");
        } else {
            return R.ok("保存成功!!");
        }
    }
    /**
     * @author Ryan
     * @description 同步质检结果信息
@@ -82,6 +102,7 @@
//        return R.ok();
    }
    @ApiOperation("基础物料信息同步")
    @PostMapping("/sync/base/matnrs")
    public R syncMatnrs(@RequestBody List<BaseMatParms> matnrs) {
@@ -92,6 +113,31 @@
        return R.ok();
    }
    public R syc
    @ApiOperation("查询单据状态")
    @PostMapping("/query/order")
    public R queryOrderStatus(@RequestBody QueryOrderParam queryParams) {
        if (Objects.isNull(queryParams)) {
            throw new CoolException("参数不能为空!!");
        }
       return receiveMsgService.queryOrderStatus(queryParams);
    }
    /**
     * @author Ryan
     * @date 2025/8/15
     * @description: 库位明细同步
     * @version 1.0
     */
    @PostMapping("/sync/locs/detls")
    @ApiOperation("库位信息明细同步")
    public R syncLocDetls(@RequestBody Map<String, Object> map) {
        BaseParam baseParam = buildParam(map, BaseParam.class);
        PageParam<Loc, BaseParam> pageParam = new PageParam<>(baseParam, Loc.class);
        QueryWrapper<Loc> wrapper = pageParam.buildWrapper(true);
        return receiveMsgService.syncLocsDetl(pageParam, wrapper);
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OrderParams.java
@@ -23,6 +23,9 @@
@ApiModel(value = "PurchaseOrder", description = "入库单据")
public class OrderParams implements Serializable {
    @ApiModelProperty("类型: {po: 采购单, do: 出库单}")
    private String type;
    @ApiModelProperty(value = "单据编码")
    private String code;
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/QueryOrderParam.java
New file
@@ -0,0 +1,24 @@
package com.vincent.rsf.server.api.controller.params;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
@Data
@Accessors(chain = true)
@ApiModel(value = "QueryOrderParam", description = "订单查询接口参数")
public class QueryOrderParam implements Serializable {
    @ApiModelProperty("单据类型:{in: 入库单, out: 出库单, check: 盘点单}")
    private String type;
    @ApiModelProperty("订单号")
    private List<String> orderNo;
}
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/WkOrderDto.java
New file
@@ -0,0 +1,24 @@
package com.vincent.rsf.server.api.controller.params;
import com.vincent.rsf.server.manager.entity.WkOrder;
import com.vincent.rsf.server.manager.entity.WkOrderItem;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.experimental.Delegate;
import java.io.Serializable;
import java.util.List;
@Data
@Accessors(chain = true)
@ApiModel(value = "WkOrderDto", description = "订单信息")
public class WkOrderDto implements Serializable {
    private static final long serialVersionUID = 1L;
    @Delegate
    private WkOrder order;
    private List<WkOrderItem> orderItems;
}
rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java
@@ -1,9 +1,14 @@
package com.vincent.rsf.server.api.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.server.api.controller.params.BaseMatParms;
import com.vincent.rsf.server.api.controller.params.OrderParams;
import com.vincent.rsf.server.api.entity.dto.PoItemsDto;
import com.vincent.rsf.server.api.controller.params.QueryOrderParam;
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.manager.entity.Loc;
import java.util.List;
@@ -23,5 +28,27 @@
     */
    boolean syncPurchasee(List<OrderParams> orders);
    /**
     * @author Ryan
     * @date 2025/8/15
     * @description: 同步基础物料信息
     * @version 1.0
     */
    void syncMatnrs(List<BaseMatParms> matnrs);
    /**
     * @author Ryan
     * @date 2025/8/15
     * @description: 订单信息查询
     * @version 1.0
     */
    R queryOrderStatus(QueryOrderParam queryParams);
    /**
     * @author Ryan
     * @date 2025/8/15
     * @description: 库位明细同步
     * @version 1.0
     */
    R syncLocsDetl(PageParam<Loc, BaseParam> pageParam, QueryWrapper<Loc> wrapper);
}
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -2,15 +2,18 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.api.controller.params.BaseMatParms;
import com.vincent.rsf.server.manager.entity.Matnr;
import com.vincent.rsf.server.manager.entity.MatnrGroup;
import com.vincent.rsf.server.api.controller.params.QueryOrderParam;
import com.vincent.rsf.server.api.controller.params.WkOrderDto;
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.enums.OrderType;
import com.vincent.rsf.server.manager.entity.PurchaseItem;
import com.vincent.rsf.server.manager.service.MatnrGroupService;
import com.vincent.rsf.server.manager.service.PurchaseItemService;
import com.vincent.rsf.server.manager.service.PurchaseService;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.manager.service.impl.MatnrServiceImpl;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.api.controller.params.OrderParams;
@@ -19,7 +22,6 @@
import com.vincent.rsf.server.system.service.FieldsService;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import com.vincent.rsf.server.api.service.ReceiveMsgService;
import com.vincent.rsf.server.manager.entity.Purchase;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -51,7 +53,25 @@
    private MatnrGroupService matnrGroupService;
    @Autowired
    private MatnrServiceImpl matnrService;
    @Autowired
    private AsnOrderService asnOrderService;
    @Autowired
    private AsnOrderItemService asnOrderItemService;
    @Autowired
    private DeliveryService deliveryService;
    @Autowired
    private DeliveryItemService deliveryItemService;
    @Autowired
    private LocService locService;
    @Autowired
    private LocItemService locItemService;
    /**
     * @author Ryan
     * @date 2025/8/15
     * @description: 保存PO/DO单据
     * @version 1.0
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean syncPurchasee(List<OrderParams> orders) {
@@ -59,35 +79,69 @@
            throw new CoolException("单据内容不能为空!!");
        }
        orders.forEach(ors -> {
            Purchase purchase = new Purchase();
            BeanUtils.copyProperties(ors, purchase);
            String wkVal = SerialRuleUtils.generateRuleCode(SerialRuleCode.PURCHASE_CODE, purchase);
            purchase.setCode(wkVal)
                    .setType(OrderType.ORDER_IN.type);
            if (!purchaseService.save(purchase)) {
                throw new CoolException("采购单据保存失败");
            }
            if (ors.getType().equals("po")) {
                Purchase purchase = new Purchase();
                BeanUtils.copyProperties(ors, purchase);
                String wkVal = SerialRuleUtils.generateRuleCode(SerialRuleCode.PURCHASE_CODE, purchase);
                purchase.setCode(wkVal)
                        .setType(OrderType.ORDER_IN.type);
                if (!purchaseService.save(purchase)) {
                    throw new CoolException("采购单据保存失败");
                }
            //查询扩展字段是否存在
            List<Fields> fields = fieldsService.list(new LambdaQueryWrapper<Fields>().eq(Fields::getStatus, 1).eq(Fields::getFlagEnable, 1));
                //查询扩展字段是否存在
                List<Fields> fields = fieldsService.list(new LambdaQueryWrapper<Fields>().eq(Fields::getStatus, 1).eq(Fields::getFlagEnable, 1));
            //判断子列表不为空
            if (!ors.getChildren().isEmpty()) {
                ArrayList<PurchaseItem> list = new ArrayList<>();
                ors.getChildren().forEach(orderItem -> {
                    PurchaseItem item = new PurchaseItem();
                    BeanUtils.copyProperties(orderItem, item);
                //判断子列表不为空
                if (!ors.getChildren().isEmpty()) {
                    ArrayList<PurchaseItem> list = new ArrayList<>();
                    ors.getChildren().forEach(orderItem -> {
                        PurchaseItem item = new PurchaseItem();
                        BeanUtils.copyProperties(orderItem, item);
//                    if (!fields.isEmpty()) {
//                        List<String> fieldValue = fields.stream().map(Fields::getFields).collect(Collectors.toList());
//                        fieldValue.forEach(value -> {
//
//                        });
//                    }
                    item.setPurchaseId(purchase.getId());
                    list.add(item);
                });
                if (!purchaseItemService.saveBatch(list)) {
                    throw new CoolException("采购单明细保存失败!!");
                        item.setPurchaseId(purchase.getId());
                        list.add(item);
                    });
                    if (!purchaseItemService.saveBatch(list)) {
                        throw new CoolException("采购单明细保存失败!!");
                    }
                }
            } else {
                Delivery delivery = new Delivery();
                BeanUtils.copyProperties(ors, delivery);
                String wkVal = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_DELIVERY_RULE_CODE, delivery);
                delivery.setCode(wkVal)
                        .setType(OrderType.ORDER_OUT.type);
                if (!deliveryService.save(delivery)) {
                    throw new CoolException("采购单据保存失败");
                }
                //查询扩展字段是否存在
                List<Fields> fields = fieldsService.list(new LambdaQueryWrapper<Fields>().eq(Fields::getStatus, 1).eq(Fields::getFlagEnable, 1));
                //判断子列表不为空
                if (!ors.getChildren().isEmpty()) {
                    ArrayList<DeliveryItem> list = new ArrayList<>();
                    ors.getChildren().forEach(orderItem -> {
                        DeliveryItem item = new DeliveryItem();
                        BeanUtils.copyProperties(orderItem, item);
//                    if (!fields.isEmpty()) {
//                        List<String> fieldValue = fields.stream().map(Fields::getFields).collect(Collectors.toList());
//                        fieldValue.forEach(value -> {
//
//                        });
//                    }
                        item.setDeliveryId(delivery.getId());
                        list.add(item);
                    });
                    if (!deliveryItemService.saveBatch(list)) {
                        throw new CoolException("采购单明细保存失败!!");
                    }
                }
            }
        });
@@ -97,6 +151,7 @@
    /**
     * 物料信息同步
     *
     * @param matnrs
     */
    @Override
@@ -125,5 +180,42 @@
        }
    }
    /**
     * @author Ryan
     * @date 2025/8/15
     * @description: 订单查询
     * @version 1.0
     */
    @Override
    public R queryOrderStatus(QueryOrderParam queryParams) {
        WkOrder wkOrders = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
                .eq(WkOrder::getCode, queryParams.getOrderNo())
                .eq(WkOrder::getType, queryParams.getType()));
        if (Objects.isNull(wkOrders)) {
            throw new CoolException("单据不存在!!");
        }
        List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, wkOrders.getId()));
        WkOrderDto wkorderDto = new WkOrderDto();
        wkorderDto.setOrder(wkOrders).setOrderItems(orderItems);
        return R.ok().add(wkorderDto);
    }
    /**
     * @author Ryan
     * @date 2025/8/15
     * @description: 同步库位信息
     * @version 1.0
     */
    @Override
    public R syncLocsDetl(PageParam<Loc, BaseParam> pageParam, QueryWrapper<Loc> wrapper) {
        Page<Object> page = new Page<>();
        page.setCurrent(pageParam.getCurrent()).setSize(pageParam.getSize());
        return null;
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocPreviewController.java
@@ -44,7 +44,7 @@
        list.add("row");
        list.add("col");
        list.add("lev");
        return R.ok().add(locService.page(pageParam, pageParam.buildWrapper(true,list)));
        return R.ok().add(locService.page(pageParam, pageParam.buildWrapper(true, list)));
    }
    @PreAuthorize("hasAuthority('manager:locPreview:list')")