rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/SyncOrderController.java
@@ -1,11 +1,13 @@ package com.vincent.rsf.server.api.controller.erp; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.api.controller.erp.params.CheckDiffParams; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.controller.erp.params.OrderParams; import com.vincent.rsf.server.api.controller.erp.params.SyncOrderParams; import com.vincent.rsf.server.api.service.ReceiveMsgService; import com.vincent.rsf.server.common.utils.ExcelUtil; import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate; import com.vincent.rsf.server.system.controller.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -18,11 +20,12 @@ import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; import java.util.Objects; @RestController @RequestMapping("/order") @Api(tags = "单据") public class SyncOrderController { public class SyncOrderController extends BaseController { @Autowired private ReceiveMsgService receiveMsgService; @@ -87,11 +90,13 @@ * @description: 同步盘点单据 * @version 1.0 */ @ApiOperation("同步盘点单") @ApiOperation("同步单据") @PostMapping("/sync/checks") public R syncCheckResult(@RequestBody List<CheckDiffParams> checkDiffs) { return R.ok(); public R syncCheckResult(@RequestBody SyncOrderParams syncOrders) { if (Objects.isNull(syncOrders)) { throw new CoolException("参数不能为空!!"); } return receiveMsgService.syncCheckOrder(syncOrders, getLoginUserId()); } } rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/CheckDiffParams.java
File was deleted rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrderParams.java
New file @@ -0,0 +1,23 @@ package com.vincent.rsf.server.api.controller.erp.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 = "SyncOrderParams", description = "单据同步参数") public class SyncOrderParams implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("单据类型{in: 收货入库单, out:出库单,check: 盘点单, }") private String type; @ApiModelProperty("单据明细信息") private List<SyncOrdersItem> items; } rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrdersItem.java
New file @@ -0,0 +1,78 @@ package com.vincent.rsf.server.api.controller.erp.params; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.experimental.Accessors; import lombok.Data; import java.io.Serializable; @Data @Accessors(chain = true) @ApiModel(value = "SyncOrdersParams", description = "同步盘点参数") public class SyncOrdersItem implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("盘点单明细ID") private Long id; @ApiModelProperty("订单ID") private Long orderId; @ApiModelProperty("订单状态{in: 入库单, out: 出库单, check: 盘点单}") private String orderType; @ApiModelProperty("业务类型") private String wkType; @ApiModelProperty("ASN单号") private String orderCode; @ApiModelProperty("物料标识") private Long matnrId; @ApiModelProperty("物料编码") private String matnrCode; @ApiModelProperty("物料名称") private String maktx; @ApiModelProperty("客单号") private String platOrderCode; @ApiModelProperty("平台标识(行号)") private String platItemId; @ApiModelProperty("工单号") private String platWorkCode; @ApiModelProperty("项目号") private String projectCode; @ApiModelProperty("字段索引") private String fieldsIndex; @ApiModelProperty("规格") private String spec; @ApiModelProperty("型号") private String model; @ApiModelProperty("送货数量") private Double anfme; @ApiModelProperty("库存单位") private String unit; @ApiModelProperty("库存批次") private String batch; @ApiModelProperty("已收数量") private Double qty; @ApiModelProperty("条形码") private String barcode; } rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java
@@ -89,4 +89,12 @@ * @version 1.0 */ R syncCompanies(List<CompaniesParam> companyParams); /** * @author Ryan * @date 2025/8/19 * @description: 单据同步--收货通知单/出库单/盘点单 * @version 1.0 */ R syncCheckOrder(SyncOrderParams syncOrders, Long loginUserId); } rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -14,8 +14,8 @@ import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.enums.CompanysType; import com.vincent.rsf.server.manager.enums.OrderType; import com.vincent.rsf.server.manager.enums.OrderWorkType; import com.vincent.rsf.server.manager.service.*; import com.vincent.rsf.server.manager.service.impl.LocAreaServiceImpl; import com.vincent.rsf.server.manager.service.impl.MatnrServiceImpl; import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.entity.Fields; @@ -30,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; /** * @author Ryan @@ -72,6 +73,7 @@ private WarehouseService warehouseService; @Autowired private CompanysService companysService; /** * @author Ryan @@ -354,4 +356,59 @@ return R.ok(); } @Override @Transactional(timeout = 60, rollbackFor = Exception.class) public R syncCheckOrder(SyncOrderParams syncOrders, Long loginUserId) { List<SyncOrdersItem> ordersItems = syncOrders.getItems(); Map<String, List<SyncOrdersItem>> listMap = ordersItems.stream().collect(Collectors.groupingBy(SyncOrdersItem::getOrderCode)); listMap.keySet().forEach(orderCode -> { WkOrder wkOrder = new WkOrder(); String ruleCode = null; if (syncOrders.getType().equals(OrderType.ORDER_CHECK.type)) { ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_CHECK_RULE_CODE, null); } else if (syncOrders.getType().equals(OrderType.ORDER_IN.type)) { ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, null); } else if (syncOrders.getType().equals(OrderType.ORDER_OUT.type)) { ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, null); } else if (syncOrders.getType().equals(OrderType.ORDER_REVISE.type)) { ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LOC_REVISE_CODE, null); } else if (syncOrders.getType().equals(OrderType.ORDER_TRANSFER.type)) { ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TRANSFER_ORDER_CODE, null); } SyncOrdersItem ordersItem = listMap.get(orderCode).stream().findFirst().get(); Double anfmes = listMap.get(orderCode).stream().mapToDouble(SyncOrdersItem::getAnfme).sum(); wkOrder.setType(syncOrders.getType()) .setWkType(OrderWorkType.getWorkType(ordersItem.getWkType())) .setAnfme(anfmes) .setPoCode(orderCode) .setPoId(ordersItem.getId()) .setCode(ruleCode) .setId(null) .setCreateTime(new Date()) .setUpdateTime(new Date()) .setCreateBy(loginUserId) .setUpdateBy(loginUserId); if (!asnOrderService.save(wkOrder)) { throw new CoolException("单据保存失败!!"); } listMap.get(orderCode).forEach(order -> { WkOrderItem wkOrderItem = new WkOrderItem(); BeanUtils.copyProperties(order, wkOrderItem); wkOrderItem.setOrderCode(wkOrder.getCode()) .setOrderId(wkOrder.getId()) .setId(null); if (!asnOrderItemService.save(wkOrderItem)) { throw new CoolException("单据明细保存失败!!"); } }); }); return R.ok(); } }