| | |
| | | import com.vincent.rsf.framework.common.Cools; |
| | | import com.vincent.rsf.framework.common.R; |
| | | import com.vincent.rsf.framework.exception.CoolException; |
| | | import com.vincent.rsf.schedule.api.controller.erp.params.ReportDataParam; |
| | | import com.vincent.rsf.schedule.api.controller.erp.params.ReportParams; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.vincent.rsf.schedule.api.service.ReportMsgService; |
| | | import com.vincent.rsf.schedule.common.utils.FieldsUtils; |
| | | import com.vincent.rsf.schedule.manager.entity.*; |
| | | import com.vincent.rsf.schedule.manager.enums.*; |
| | | import com.vincent.rsf.schedule.manager.service.*; |
| | |
| | | * @description 删除已完成订单加入Log表 |
| | | * @time 2025/3/19 19:09 |
| | | */ |
| | | // @Scheduled(cron = "0/35 * * * * ? ") |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void InStockToLog() { |
| | | List<WkOrder> wkOrders = asnOrderService.list(new LambdaQueryWrapper<WkOrder>() |
| | |
| | | /** |
| | | * @author Ryan |
| | | * @date 2025/10/28 |
| | | * @description: 上传已完成订单至ERP平台 |
| | | * @description: 定时触发rsf-open-api上报ERP |
| | | * @version 1.0 |
| | | */ |
| | | @Scheduled(cron = "0/30 * * * * ? ") |
| | | public void reportToErp() { |
| | | try { |
| | | reportMsgService.triggerErpReport(); |
| | | } catch (Exception e) { |
| | | log.error("触发ERP上报失败", e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @author Ryan |
| | | * @date 2025/10/28 |
| | | * @description: 上传已完成订单至ERP平台(新链路,Order格式) |
| | | * @version 1.0 |
| | | */ |
| | | public void reportOrders(WkOrder order) { |
| | | ReportParams params = new ReportParams(); |
| | | List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId())); |
| | | if (orderItems.isEmpty()) { |
| | | throw new CoolException("订据明细不存在!!"); |
| | | } |
| | | List<ReportDataParam> reportData = new ArrayList<>(); |
| | | orderItems.forEach(orderItem -> { |
| | | ReportDataParam param = new ReportDataParam(); |
| | | User user = userService.getById(order.getUpdateBy()); |
| | | String nickName = null; |
| | | if (!Objects.isNull(user)) { |
| | | nickName = user.getNickname(); |
| | | |
| | | // 构建Order格式的JSON数据,与下发/add接口字段保持一致 |
| | | JSONObject orderData = new JSONObject(true); |
| | | // 幂等键:orderNo + reportOnce 确保每次上报唯一 |
| | | int seq = order.getReportOnce() == null ? 0 : order.getReportOnce(); |
| | | orderData.put("eventId", order.getCode() + "_REPORT_" + seq); |
| | | orderData.put("orderNo", order.getCode()); |
| | | orderData.put("poCode", order.getPoCode()); |
| | | orderData.put("type", order.getType()); |
| | | orderData.put("wkType", order.getWkType()); |
| | | orderData.put("createTime", order.getCreateTime() != null ? order.getCreateTime().getTime() / 1000 : null); |
| | | orderData.put("memo", order.getMemo()); |
| | | |
| | | User user = userService.getById(order.getUpdateBy()); |
| | | String nickName = null; |
| | | if (!Objects.isNull(user)) { |
| | | nickName = user.getNickname(); |
| | | } |
| | | orderData.put("editUser", nickName); |
| | | orderData.put("editDate", order.getUpdateTime() != null ? order.getUpdateTime().getTime() / 1000 : null); |
| | | |
| | | // 构建明细列表,字段与OrderItem一致 |
| | | List<JSONObject> items = new ArrayList<>(); |
| | | for (WkOrderItem orderItem : orderItems) { |
| | | JSONObject item = new JSONObject(true); |
| | | item.put("lineId", orderItem.getPlatItemId()); |
| | | item.put("planNo", orderItem.getPlatWorkCode()); |
| | | item.put("matNr", orderItem.getMatnrCode()); |
| | | item.put("makTx", orderItem.getMaktx()); |
| | | item.put("anfme", orderItem.getAnfme()); |
| | | item.put("batch", orderItem.getBatch()); |
| | | item.put("unit", orderItem.getStockUnit()); |
| | | item.put("spec", orderItem.getSpec()); |
| | | item.put("model", orderItem.getModel()); |
| | | item.put("memo", orderItem.getMemo()); |
| | | // 完成数量:入库用qty,出库用workQty |
| | | if (order.getType().equals(OrderType.ORDER_IN.type)) { |
| | | item.put("doneQty", orderItem.getQty()); |
| | | } else { |
| | | item.put("doneQty", orderItem.getWorkQty()); |
| | | } |
| | | items.add(item); |
| | | } |
| | | orderData.put("orderItems", items); |
| | | |
| | | Map<String, String> fields = FieldsUtils.getFields(orderItem.getFieldsIndex()); |
| | | |
| | | //设置通用参数 |
| | | param.setWMSNO(order.getCode()) |
| | | .setPONO(order.getPoCode()) |
| | | .setOrderNO(order.getPoCode()) |
| | | .setOrderDate(order.getCreateTime()) |
| | | .setItemCode(orderItem.getMatnrCode()) |
| | | .setEditUser(nickName) |
| | | .setEditDate(order.getUpdateTime()) |
| | | // .setGoodsNO(fields.get("crushNo")) |
| | | .setMemoDtl(order.getMemo()); |
| | | |
| | | if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_DONE_IN.type)) { |
| | | //采购入库单 |
| | | params.setOrderType("PO_Instock").setAction("Update"); |
| | | //获取指定查询字段CrushNo 票号 |
| | | param.setInQty(orderItem.getQty()); |
| | | } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE_RETURN.type)) { |
| | | //采购退货 |
| | | params.setOrderType("PR_Outstock").setAction("Update"); |
| | | param.setOutQty(orderItem.getQty()); |
| | | } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD.type)) { |
| | | //生产入库单 |
| | | // params.setOrderType("WO_Outstock").setAction("Update"); |
| | | } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE.type)) { |
| | | //生产退料 |
| | | params.setOrderType("WR_Instock").setAction("Update"); |
| | | param.setInQty(orderItem.getQty()); |
| | | } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_RETURN_ORDER.type)) { |
| | | //生产领料 |
| | | params.setOrderType("WO_Outstock").setAction("Update"); |
| | | param.setOutQty(orderItem.getQty()); |
| | | |
| | | } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD_ADDITION.type)) { |
| | | //生产补料 |
| | | params.setOrderType("WR_Instock_BL").setAction("Update"); |
| | | param.setOutQty(orderItem.getQty()); |
| | | } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_FIX_OUT.type)) { |
| | | params.setOrderType("WO_Outstock_WR").setAction("Update"); |
| | | param.setOutQty(orderItem.getQty()); |
| | | } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type)) { |
| | | //其它入库单/手动入库单 |
| | | params.setOrderType("In_Instock").setAction("Update"); |
| | | param.setInQty(orderItem.getQty()); |
| | | |
| | | } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER.type)) { |
| | | //其它出库单/手动出库单 |
| | | params.setOrderType("Io_Outstock").setAction("Update"); |
| | | param.setOutQty(orderItem.getQty()); |
| | | } |
| | | reportData.add(param); |
| | | }); |
| | | params.setData(reportData); |
| | | try { |
| | | R reported = reportMsgService.uploadReportOrders(params); |
| | | if (reported.get("code").equals("200")) { |
| | | R reported = reportMsgService.uploadReportOrdersNew(orderData); |
| | | if (reported.get("code").equals(200)) { |
| | | order.setNtyStatus(OrderReportStatus.ORDER_REPORT_STATUS_ALL.val); |
| | | asnOrderService.updateById(order); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("<UNK>", e); |
| | | log.error("上报订单失败", e); |
| | | } |
| | | } |
| | | |