rsf-admin/.env | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-admin/src/page/dashboard/index.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReceiveMsgController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OrderParams.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/QueryOrderParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/WkOrderDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocPreviewController.java | ●●●●● 补丁 | 查看 | 原始文档 | 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')")