| src/main/java/com/zy/asrs/controller/OpenController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/entity/ErpReportDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/entity/param/MatSyncParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/entity/param/OpenOrderPakinParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/OpenService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/task/OrderSyncScheduler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/task/handler/OrderPakinSyncHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/task/handler/OrderPakoutSyncHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -73,12 +73,12 @@ } @PostMapping("/order/matSync/default/v1") // @AppAuth(memo = "商品信息同步接口") @AppAuth(memo = "物料信息同步") public synchronized R syncMatInfo(@RequestHeader(required = false) String appkey, @RequestBody(required = false) MatSyncParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { if (Cools.isEmpty(param,param.getMatDetails())) { return R.parse(BaseRes.PARAM); } openService.syncMat(param); @@ -106,6 +106,7 @@ * 添加入库单 */ @PostMapping("/order/pakin/default/v1") @AppAuth(memo = "入库单据下发") public synchronized R pakinOrderCreate(@RequestHeader(required = false) String appkey, @RequestBody OpenOrderPakinParam param, HttpServletRequest request) { @@ -120,6 +121,9 @@ return R.error("单据类型[orderType]不能为空"); } if (Cools.isEmpty(param.getOrderDetails())) { return R.error("单据明细[orderDetails]不能为空"); } if (!param.getOptType().equals("delete") && Cools.isEmpty(param.getOrderDetails())) { return R.error("单据明细[orderDetails]不能为空"); } openService.pakinOrderCreate(param); @@ -141,7 +145,7 @@ * 添加出库单 */ @PostMapping("/order/pakout/default/v1") @AppAuth(memo = "添加订单出库") @AppAuth(memo = "出库单据下发") public synchronized R pakoutOrderCreate(@RequestHeader(required = false) String appkey, @RequestBody OpenOrderPakoutParam param, HttpServletRequest request) { @@ -158,6 +162,9 @@ if (Cools.isEmpty(param.getOrderDetails())) { return R.error("单据明细[orderDetails]不能为空"); } if (!param.getOptType().equals("delete") && Cools.isEmpty(param.getOrderDetails())) { return R.error("单据明细[orderDetails]不能为空"); } openService.pakoutOrderCreate(param); return R.ok(); } src/main/java/com/zy/asrs/entity/ErpReportDto.java
New file @@ -0,0 +1,28 @@ package com.zy.asrs.entity; import com.zy.common.model.DetlDto; import lombok.AllArgsConstructor; import lombok.Data; import java.util.List; /** * @author pang.jiabao * @description 单据完成上报参数 * @createDate 2025/11/12 10:55 */ @Data public class ErpReportDto { private String orderNo; private List<DetlDto> orderDetails; @Data @AllArgsConstructor public static class DetlDto { private String matnr; private Double anfme; } } src/main/java/com/zy/asrs/entity/param/MatSyncParam.java
@@ -20,6 +20,13 @@ @Data public static class MatParam { /** * 操作类型 * add.新增,delete.删除,update.修改 */ private String optType; /** * 商品编号 */ src/main/java/com/zy/asrs/entity/param/OpenOrderPakinParam.java
@@ -15,6 +15,9 @@ private String orderType; // 操作类型 add.新增,delete.删除 private String optType; private String orderTime; private List<DetlDto> orderDetails; src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutParam.java
@@ -17,6 +17,9 @@ private String orderTime; // 操作类型 add.新增,delete.删除 private String optType; private List<DetlDto> orderDetails; private String lgort; src/main/java/com/zy/asrs/service/OpenService.java
@@ -19,7 +19,7 @@ List<OpenOrderCompeteResult> pakinOrderComplete(OpenOrderCompleteParam param); /** * 添加入库单 * 添加出库单 */ void pakoutOrderCreate(OpenOrderPakoutParam param); src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -56,11 +56,15 @@ @Override @Transactional public void pakinOrderCreate(OpenOrderPakinParam param) { String orderNo = param.getOrderNo(); String orderType = param.getOrderType(); String optType = param.getOptType(); OrderPakin order = orderPakinService.selectByNo(param.getOrderNo()); if (optType.equals("add")) { if (!Cools.isEmpty(order)) { throw new CoolException(param.getOrderNo() + "单据已存在,请勿重复提交"); } DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.TRUE); DocType docType = docTypeService.selectOrAdd(orderType, Boolean.TRUE); Date now = new Date(); // 单据主档 order = new OrderPakin( @@ -93,9 +97,9 @@ null, // 物流单号 1L, // 订单状态 1, // 状态 9527L, // 添加人员 null, // 添加人员 now, // 添加时间 9527L, // 修改人员 null, // 修改人员 now, // 修改时间 null // 备注 ); @@ -131,9 +135,9 @@ orderDetl.setStandby3(detlDto.getStandby3()); orderDetl.setOrderId(order.getId()); orderDetl.setOrderNo(order.getOrderNo()); orderDetl.setCreateBy(9527L); orderDetl.setCreateBy(null); orderDetl.setCreateTime(now); orderDetl.setUpdateBy(9527L); orderDetl.setUpdateBy(null); orderDetl.setUpdateTime(now); orderDetl.setStatus(1); orderDetl.setQty(0.0D); @@ -141,6 +145,24 @@ if (!orderDetlPakinService.insert(orderDetl)) { throw new CoolException("生成单据明细失败,请联系管理员"); } } } else if (optType.equals("delete")) { if (Cools.isEmpty(order)) { throw new CoolException(orderNo + "单据不存在!"); } // 订单状态 Long settle = order.getSettle(); if (settle == 1) { // 删除订单明细 orderDetlPakinService.delete(new EntityWrapper<OrderDetlPakin>().eq("order_id", order.getId())); // 删除订单主表 orderPakinService.delete(new EntityWrapper<OrderPakin>().eq("id", order.getId())); } else { throw new CoolException(orderNo + ":订单已处理,无法取消"); } } else { throw new CoolException(orderNo + ",操作类型不存在:" + optType); } } @@ -204,15 +226,19 @@ @Override @Transactional public void pakoutOrderCreate(OpenOrderPakoutParam param) { String orderNo = param.getOrderNo(); String optType = param.getOptType(); String orderType = param.getOrderType(); OrderPakout order = orderPakoutService.selectByNo(param.getOrderNo()); // 如果单据不存在则添加;如果单据存在,作业中无法修改,反之则修改单据 if (optType.equals("add")) { if (!Cools.isEmpty(order)) { if (order.getSettle() > 1L) { throw new CoolException(param.getOrderNo() + "正在出库,无法修改单据"); throw new CoolException(param.getOrderNo() + "订单已存在"); } orderPakoutService.remove(order.getId()); } DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.FALSE); DocType docType = docTypeService.selectOrAdd(orderType, Boolean.FALSE); Date now = new Date(); // 单据主档 order = new OrderPakout( @@ -245,9 +271,9 @@ null, // 物流单号 1L, // 订单状态 1, // 状态 9527L, // 添加人员 null, // 添加人员 now, // 添加时间 9527L, // 修改人员 null, // 修改人员 now, // 修改时间 null // 备注 ); @@ -285,9 +311,9 @@ orderDetl.setStandby3(detlDto.getStandby3()); orderDetl.setOrderId(order.getId()); orderDetl.setOrderNo(order.getOrderNo()); orderDetl.setCreateBy(9527L); orderDetl.setCreateBy(null); orderDetl.setCreateTime(now); orderDetl.setUpdateBy(9527L); orderDetl.setUpdateBy(null); orderDetl.setUpdateTime(now); orderDetl.setStatus(1); orderDetl.setQty(0.0D); @@ -295,6 +321,23 @@ if (!orderDetlPakoutService.insert(orderDetl)) { throw new CoolException("生成单据明细失败,请联系管理员"); } } } else if (optType.equals("delete")) { if (Cools.isEmpty(order)) { throw new CoolException(orderNo + "单据不存在!"); } // 订单状态 Long settle = order.getSettle(); if (settle == 1) { // 删除订单明细 orderDetlPakoutService.delete(new EntityWrapper<OrderDetlPakout>().eq("order_id", order.getId())); // 删除订单主表 orderPakoutService.delete(new EntityWrapper<OrderPakout>().eq("id", order.getId())); } else { throw new CoolException(orderNo + ":订单已处理,无法取消"); } } else { throw new CoolException(orderNo + ",操作类型不存在:" + optType); } } @@ -473,31 +516,31 @@ @Override @Transactional public void syncMat(MatSyncParam param) { if (Cools.isEmpty(param.getMatDetails()) || param.getMatDetails().size() <= 0) { throw new CoolException("商品数据为空"); } for (MatSyncParam.MatParam matParam : param.getMatDetails()) { if (Cools.isEmpty(matParam.getMatnr())) { throw new CoolException("商品编码不能为空"); } Date now = new Date(); for (MatSyncParam.MatParam matParam : param.getMatDetails()) { String logInfo = "optType:" + matParam.getOptType() + ",matnr:" + matParam.getMatnr() + ",maktx:" + matParam.getMaktx() + ",specs:" + matParam.getSpecs(); if (Cools.isEmpty(matParam.getOptType(), matParam.getMatnr(), matParam.getMaktx())) { throw new CoolException("商品信息不能为空[" + logInfo + "]"); } Mat mat = matService.selectByMatnr(matParam.getMatnr()); if (mat == null) { switch (matParam.getOptType()) { case "add": if (mat != null) { throw new CoolException("商品信息已经存在[" + logInfo + "]"); } mat = new Mat(); // 分类 Long tagId; // 一级分类 if (!Cools.isEmpty(matParam.getGroupCode()) && !Cools.isEmpty(matParam.getGroupName())) { Tag priTag = tagService.selectByName(matParam.getGroupCode(), 2); if (!Cools.isEmpty(matParam.getGroupName())) { Tag priTag = tagService.selectByName(matParam.getGroupName(), 2); if (priTag == null) { Tag top = tagService.getTop(); NodeUtils nodeUtils = new NodeUtils(); nodeUtils.executePath(top.getId()); priTag = new Tag( null, // 编号 matParam.getGroupCode(), // 名称 matParam.getGroupName(), // 名称 top.getId(), // 父级 top.getName(), // 父级名称 nodeUtils.path.toString(), // 关联路径 @@ -520,64 +563,46 @@ throw new CoolException("服务器内部错误,请联系管理员"); } } // 二级分类 Tag secTag = tagService.selectByName(matParam.getGroupName(), 3); if (secTag == null) { NodeUtils nodeUtils = new NodeUtils(); nodeUtils.executePath(priTag.getId()); secTag = new Tag( null, // 编号 matParam.getGroupName(), // 名称 priTag.getId(), // 父级 priTag.getName(), // 父级名称 nodeUtils.path.toString(), // 关联路径 nodeUtils.pathName.toString(), // 关联路径名 0, // 类型 null, // 负责人 null, // 图片 null, // 简要描述 null, // 数量 3, // 等级 null, // 排序 1, // 状态 now, // 添加时间 null, // 添加人员 now, // 修改时间 null, // 修改人员 null // 备注 ); if (tagMapper.insert(secTag) == 0) { throw new CoolException("服务器内部错误,请联系管理员"); } } tagId = secTag.getId(); tagId = priTag.getId(); } else { tagId = tagService.getTop().getId(); } mat.sync(matParam); // mat.setMatnr(param.getMatnr()); // mat.setMaktx(param.getMaktx()); // mat.setSpecs(param.getSpecs()); // mat.setModel(param.getModel()); mat.setTagId(tagId); mat.setLocType(tagId); mat.setStatus(1); mat.setCreateTime(now); mat.setUpdateTime(now); if (!matService.insert(mat)) { throw new CoolException("服务器内部错误,请联系管理员"); throw new CoolException("同步新物料错误[" + logInfo + "]"); } else { log.info("同步新物料[商品编号:{}]", mat.getMatnr()); log.info("同步新物料[{}]", logInfo); } break; case "delete": if (mat == null) { throw new CoolException("商品信息不存在[" + logInfo + "]"); } if (matService.delete(new EntityWrapper<Mat>().eq("matnr", matParam.getMatnr()))) { log.info("删除物料[{}]", logInfo); } else { throw new CoolException("删除已存在商品信息失败[" + logInfo + "]"); } break; case "update": if (mat == null) { throw new CoolException("商品信息不存在[" + logInfo + "]"); } mat.sync(matParam); if (!matService.update(mat, new EntityWrapper<Mat>().eq("matnr", matParam.getMatnr()))) { throw new CoolException("更新已存在商品信息失败,请联系管理员"); throw new CoolException("更新已存在商品信息失败[" + logInfo + "]"); } else { log.info("更新物料[:{}]", logInfo); } break; default: throw new CoolException("商品信息操作类型不存在[" + logInfo + "]"); } } } } } src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -50,7 +50,7 @@ } } catch (Exception e) { log.error(e.getMessage()); log.error("单据[orderNo={}]上报erp失败", order.getOrderNo()); log.error("单据[orderNo={}]上报erp异常", order.getOrderNo()); } } } @@ -69,7 +69,7 @@ } } catch (Exception e) { log.error(e.getMessage()); log.error("单据[orderNo={}]上报erp失败", order.getOrderNo()); log.error("单据[orderNo={}]上报erp异常", order.getOrderNo()); } } } src/main/java/com/zy/asrs/task/handler/OrderPakinSyncHandler.java
@@ -5,10 +5,7 @@ import com.core.common.Cools; import com.core.common.DateUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.DocType; import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.entity.OrderDetlPakin; import com.zy.asrs.entity.OrderPakin; import com.zy.asrs.entity.*; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.DocTypeService; import com.zy.asrs.service.OrderDetlPakinService; @@ -23,6 +20,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; /** @@ -51,12 +49,14 @@ return FAIL.setMsg("未找到对应的单据类型:" + order.getOrderNo()); } MesPakinParam pakinParam = new MesPakinParam(); ErpReportDto param = new ErpReportDto(); param.setOrderDetails(new ArrayList<>()); List<OrderDetlPakin> orderDetls = orderDetlPakinService.selectByOrderId(order.getId()); for (OrderDetlPakin orderDetl : orderDetls) { String serial = Cools.isEmpty(orderDetl.getBatch()) ? "" : orderDetl.getBatch(); pakinParam.getList().add(new MesPakinParam.Detl(orderDetl.getMatnr() + (Cools.isEmpty(serial) ? "" : "-" + serial), orderDetl.getAnfme())); param.getOrderDetails().add(new ErpReportDto.DetlDto(orderDetl.getMatnr(),orderDetl.getQty())); } param.setOrderNo(order.getOrderNo()); String response = ""; boolean success = false; ReturnT<String> result = SUCCESS; @@ -64,7 +64,7 @@ response = new HttpHandler.Builder() .setUri(MesConstant.URI) .setPath(MesConstant.PAKIN_PATH) .setJson(JSON.toJSONString(pakinParam)) .setJson(JSON.toJSONString(param)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); @@ -73,7 +73,7 @@ orderPakinService.updateSettle(order.getId(), 6L, null); success = true; } else { log.error("入库完成上报erp失败!url:{};request:{};response:{}", MesConstant.URI + MesConstant.PAKIN_PATH, JSON.toJSONString(pakinParam), response); log.error("入库完成上报erp失败!url:{};request:{};response:{}", MesConstant.URI + MesConstant.PAKIN_PATH, JSON.toJSONString(param), response); throw new CoolException("入库完成上报erp失败"); } } catch (Exception e) { @@ -87,7 +87,7 @@ MesConstant.URI + MesConstant.PAKIN_PATH, null, "127.0.0.1", JSON.toJSONString(pakinParam), JSON.toJSONString(param), response, success ); src/main/java/com/zy/asrs/task/handler/OrderPakoutSyncHandler.java
@@ -5,10 +5,7 @@ import com.core.common.Cools; import com.core.common.DateUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.DocType; import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.entity.OrderDetlPakout; import com.zy.asrs.entity.OrderPakout; import com.zy.asrs.entity.*; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.DocTypeService; import com.zy.asrs.service.OrderDetlPakoutService; @@ -23,6 +20,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; /** @@ -51,14 +49,14 @@ return FAIL.setMsg("未找到对应的单据类型:" + order.getOrderNo()); } MesPakoutParam pakoutParam = new MesPakoutParam(); pakoutParam.setTag(!order.getDocType$().equalsIgnoreCase("手动出库单")); pakoutParam.setOrderNo(order.getOrderNo()); ErpReportDto param = new ErpReportDto(); param.setOrderDetails(new ArrayList<>()); List<OrderDetlPakout> orderDetls = orderDetlPakoutService.selectByOrderId(order.getId()); for (OrderDetlPakout orderDetl : orderDetls) { String serial = Cools.isEmpty(orderDetl.getBatch()) ? "" : orderDetl.getBatch(); pakoutParam.getList().add(new MesPakoutParam.Detl(orderDetl.getMatnr() + (Cools.isEmpty(serial) ? "" : "-" + serial), orderDetl.getAnfme())); param.getOrderDetails().add(new ErpReportDto.DetlDto(orderDetl.getMatnr(),orderDetl.getQty())); } param.setOrderNo(order.getOrderNo()); String response = ""; boolean success = false; ReturnT<String> result = SUCCESS; @@ -66,7 +64,7 @@ response = new HttpHandler.Builder() .setUri(MesConstant.URI) .setPath(MesConstant.PAKOUT_PATH) .setJson(JSON.toJSONString(pakoutParam)) .setJson(JSON.toJSONString(param)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); @@ -75,7 +73,7 @@ orderPakoutService.updateSettle(order.getId(), 6L, null); success = true; } else { log.error("出库完成上报erp失败!url:{};request:{};response:{}", MesConstant.URI + MesConstant.PAKOUT_PATH, JSON.toJSONString(pakoutParam), response); log.error("出库完成上报erp失败!url:{};request:{};response:{}", MesConstant.URI + MesConstant.PAKOUT_PATH, JSON.toJSONString(param), response); throw new CoolException("出库完成上报erp失败"); } } catch (Exception e) { @@ -89,7 +87,7 @@ MesConstant.URI + MesConstant.PAKOUT_PATH, null, "127.0.0.1", JSON.toJSONString(pakoutParam), JSON.toJSONString(param), response, success );