From 6a3d98a073a8731e7db427eed3a1957ae36bb9b1 Mon Sep 17 00:00:00 2001 From: FCD <2453864257@qq.com> Date: Thu, 16 Oct 2025 11:33:39 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=A0=87=E8=AF=86=E5=8D=A1=EF=BC=9A=E6=89=98?= =?UTF-8?q?=E7=9B=98=E5=8F=B7=E8=B0=83=E6=95=B4=E4=B8=BA=20=E5=B7=A5?= =?UTF-8?q?=E5=8D=95+=E6=9D=BF=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ProOrderWorkorderServiceImpl.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderWorkorderServiceImpl.java b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderWorkorderServiceImpl.java index 51eadee71..09a7230ff 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderWorkorderServiceImpl.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderWorkorderServiceImpl.java @@ -1315,6 +1315,7 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { while(pall.compareTo(BigDecimal.ZERO)>0){ pw = new ProOrderWorkorder(); + pw.setProductCode(pow.getProductCode()); pw.setProductName(pow.getProductName()); pw.setWorkorderCode(pow.getWorkorderCode()); pw.setBatchCode(pow.getBatchCode()); @@ -1328,13 +1329,9 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { pw.setUnit(pow.getUnit()); pw.setUmrez(pw.getBatchQuantity().multiply(pow.getUmrez()));//子单数量 pw.setPalletNo(i++); - //批次+板号+物料+工单号 - pw.setPalletCode( - pow.getBatchCode() + "-" - + pw.getPalletNo() + "-" - + pow.getProductCode().replace("0000000","") + "-" - + pow.getWorkorderCode().replace("000","") - );//workorderCode 实际上是订单号 + //托盘号:工单+板号 + pw.setPalletCode(trimZero(pow.getWorkorderCode()) + "-" + pw.getPalletNo()); + //workorderCode 实际上是订单号 pw.setCreateTime(nowDate); pw.setCreateBy(SecurityUtils.getUsername()); pw.setAddFlag("0");//增打标志 @@ -1359,14 +1356,12 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { List dtos1 = proOrderWorkorderMapper.getPreIdCardList(proOrderWorkorder); ProOrderWorkorder pow = dtos1.get(0); proOrderWorkorder.setPalletNo(palletNo); - //批次+板号+物料+工单号 + //托盘号:工单+板号 // String uniqueBarCode = pow.getProductCode().replace("0000000","") + "-" + // pow.getWorkorderCode() + "-" + proOrderWorkorder.getBatchCode() + "-" + palletNo;//订单号+批次+板次 唯一二维码标识 - String uniqueBarCode = proOrderWorkorder.getBatchCode() + "-" - + palletNo + "-" - + pow.getProductCode().replace("0000000","") + "-" - + pow.getWorkorderCode().replace("000",""); + String uniqueBarCode = trimZero(pow.getWorkorderCode()) + "-" + palletNo; ProOrderWorkorder pw = new ProOrderWorkorder(); + pw.setProductCode(pow.getProductCode());//产品编码 pw.setProductName(pow.getProductName());//产品名 pw.setWorkorderCode(pow.getWorkorderCode());//工单号 实际是订单号 pw.setBatchCode(proOrderWorkorder.getBatchCode());//批次号 @@ -1408,6 +1403,14 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { return dtos; } + //剔除字符串前面的0 + public String trimZero(String str){ + if(str == null || str.isEmpty()){ + throw new RuntimeException("工单号为空"); + } + return str.replaceFirst("^0+", ""); + } + @Override @DS("#header.poolName") public List getIdCardListRefresh(ProOrderWorkorder proOrderWorkorder) { From 9f6dd7f1dfb1303f366df1250c142dbde3a81d90 Mon Sep 17 00:00:00 2001 From: FCD <2453864257@qq.com> Date: Thu, 16 Oct 2025 11:38:19 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=88=90=E5=93=81=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=85=A5=E5=BA=93=E6=96=B0=E5=A2=9Esap=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/op/system/api/RemoteSapService.java | 4 + .../api/domain/sap/SapHandMadeInStorage.java | 91 +++++++++++++++++++ .../api/factory/RemoteSapFallbackFactory.java | 5 + .../com/op/sap/controller/SapController.java | 9 ++ .../com/op/sap/service/SapOrderService.java | 2 + .../sap/service/impl/SapOrderServiceImpl.java | 62 ++++++++++++- .../impl/WmsProductPutServiceImpl.java | 38 +++++++- 7 files changed, 204 insertions(+), 7 deletions(-) create mode 100644 op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapHandMadeInStorage.java diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/RemoteSapService.java b/op-api/op-api-system/src/main/java/com/op/system/api/RemoteSapService.java index cab856c42..01133f13e 100644 --- a/op-api/op-api-system/src/main/java/com/op/system/api/RemoteSapService.java +++ b/op-api/op-api-system/src/main/java/com/op/system/api/RemoteSapService.java @@ -152,6 +152,10 @@ public interface RemoteSapService { public R ObtainSapInventory(@RequestBody(required = false) SapZmesGetMchb sapZmesGetMchb); @PostMapping("/sap/sapZmesAnlaGet") public R sapZmesAnlaGet(@RequestBody(required = false) Map paramMap); + + @PostMapping("/sap/handMadeInStorage") + public R handMadeInStorage(@RequestBody List list); + } diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapHandMadeInStorage.java b/op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapHandMadeInStorage.java new file mode 100644 index 000000000..7fe9e15bf --- /dev/null +++ b/op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapHandMadeInStorage.java @@ -0,0 +1,91 @@ +package com.op.system.api.domain.sap; + +/** + * remark 手持入库实体类 + * + * @author 019117 + * @date + */ +public class SapHandMadeInStorage { + + /** + * 物料描述 + */ + private String materialDesc; + + /** + * 物料编码 + */ + private String materialCode; + + /** 批次号 **/ + private String batchCode; + + /** 工厂号 **/ + private String factoryNo; + + /** 仓库 **/ + private String warehouse; + + /** 创建人 **/ + private String createBy; + + /** 创建时间 yyyymmdd **/ + private String createTime; + + public String getMaterialDesc() { + return materialDesc; + } + + public void setMaterialDesc(String materialDesc) { + this.materialDesc = materialDesc; + } + + public String getMaterialCode() { + return materialCode; + } + + public void setMaterialCode(String materialCode) { + this.materialCode = materialCode; + } + + public String getBatchCode() { + return batchCode; + } + + public void setBatchCode(String batchCode) { + this.batchCode = batchCode; + } + + public String getFactoryNo() { + return factoryNo; + } + + public void setFactoryNo(String factoryNo) { + this.factoryNo = factoryNo; + } + + public String getWarehouse() { + return warehouse; + } + + public void setWarehouse(String warehouse) { + this.warehouse = warehouse; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } +} diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteSapFallbackFactory.java b/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteSapFallbackFactory.java index 15b438725..0e15409a6 100644 --- a/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteSapFallbackFactory.java +++ b/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteSapFallbackFactory.java @@ -188,6 +188,11 @@ public class RemoteSapFallbackFactory implements FallbackFactory list) { + return R.fail("手持成品物料收货入库失败" + throwable.getMessage()); + } + }; } } diff --git a/op-modules/op-sap/src/main/java/com/op/sap/controller/SapController.java b/op-modules/op-sap/src/main/java/com/op/sap/controller/SapController.java index 967ef67dc..fccbe7843 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/controller/SapController.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/controller/SapController.java @@ -643,4 +643,13 @@ public class SapController extends BaseController { public R ObtainSapInventory(@RequestBody(required = false) SapZmesGetMchb sapZmesGetMchb) { return sapItemSyncService.ObtainSapInventory(sapZmesGetMchb); } + + /** + * 手持成品物料收货入库 + * **/ + @PostMapping("/handMadeInStorage") + @Log(title = "手持成品物料收货入库", businessType = BusinessType.SAP) + public R handMadeInStorage(@RequestBody List list) { + return sapOrderService.handMadeInStorage(list); + } } diff --git a/op-modules/op-sap/src/main/java/com/op/sap/service/SapOrderService.java b/op-modules/op-sap/src/main/java/com/op/sap/service/SapOrderService.java index a3fe16e0b..77d22d55d 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/service/SapOrderService.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/service/SapOrderService.java @@ -60,4 +60,6 @@ public interface SapOrderService { R sapPOrderGoodsReceipt(List> mapList); R shopOrderBomUpdate(List> mapList); + + R handMadeInStorage(List list); } diff --git a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapOrderServiceImpl.java b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapOrderServiceImpl.java index 45c6078b9..3d9cfa653 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapOrderServiceImpl.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapOrderServiceImpl.java @@ -10,13 +10,9 @@ import com.op.common.core.utils.StringUtils; import com.op.common.core.utils.uuid.IdUtils; import com.op.sap.domain.vo.SapOrderReceiptQuery; -import com.op.system.api.domain.sap.SapPurchaseOrderQuery; +import com.op.system.api.domain.sap.*; import com.op.sap.service.SapOrderService; -import com.op.system.api.domain.sap.SapCloseOrderQuery; -import com.op.system.api.domain.sap.SapCreateOrder; -import com.op.system.api.domain.sap.SapRFW; -import com.op.system.api.domain.sap.SapShopOrderQuery; import com.op.system.api.model.SapProOrder; import com.sap.conn.jco.*; @@ -685,6 +681,62 @@ public class SapOrderServiceImpl implements SapOrderService { return R.ok(successMsg); } + + //手持成品物料收货入库 + @Override + public R handMadeInStorage(List list) { + String msg = null; + try { + + log.info("手持成品物料收货入库-----" + JSONObject.toJSONString(list)); + JCoRepository repository = dest.getRepository(); + JCoFunction func = repository.getFunction("ZMB_MODIFY_ZMMKW"); + + if (func == null) { + throw new RuntimeException("Function does not exist in SAP"); + } + if (!list.isEmpty()) { + + func.getImportParameterList().setValue("P_WRITE", "X"); + + JCoTable table = func.getTableParameterList().getTable("IN_ZMMKW"); + + for (SapHandMadeInStorage item : list) { + table.appendRow(); + //物料编码 + table.setValue("MATNR", item.getMaterialCode()); + //物料描述 + table.setValue("MAKTX", item.getMaterialCode()); + //批次 + table.setValue("CHARG", item.getBatchCode()); + //工厂 + table.setValue("WERKS", item.getFactoryNo()); + //区位 + table.setValue("ABLAD", item.getWarehouse()); + //状态 + table.setValue("ZTYPE", "1"); + //修改人 + table.setValue("ZNAME", item.getCreateBy()); + //修改日期 + table.setValue("ZMDDAT", item.getCreateTime()); + } + + func.execute(dest); + + msg = func.getExportParameterList().getString("RETMSG"); + String code = func.getExportParameterList().getString("RETCODE"); + + return R.ok(); + } else { + log.error("接收的数据为空"); + return R.fail("接收的数据为空"); + } + } catch (Exception e) { + log.error(msg + e.getMessage()); + return R.fail(msg); + } + } + } diff --git a/op-modules/op-wms/src/main/java/com/op/wms/service/impl/WmsProductPutServiceImpl.java b/op-modules/op-wms/src/main/java/com/op/wms/service/impl/WmsProductPutServiceImpl.java index f46825267..eb15e763b 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/service/impl/WmsProductPutServiceImpl.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/service/impl/WmsProductPutServiceImpl.java @@ -11,9 +11,11 @@ import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.op.common.core.domain.R; import com.op.common.core.utils.DateUtils; +import com.op.common.core.utils.StringUtils; import com.op.common.core.utils.uuid.IdUtils; import com.op.common.security.utils.SecurityUtils; import com.op.system.api.RemoteQualityService; +import com.op.system.api.domain.sap.SapHandMadeInStorage; import com.op.system.api.domain.wms.wmsReportWork; import com.op.system.api.RemoteSapService; import com.op.wms.domain.*; @@ -1253,9 +1255,21 @@ public class WmsProductPutServiceImpl implements IWmsProductPutService { String formattedDate = dateFormat.format(date);//批次 List wmsProductPutList = wmsProductPut.getWmsProductPut();//前端下栏保存的数据 + //用于写入sap + List sapHandMadeInStorageList = new ArrayList<>(); + String SUCCESS = "操作成功"; - for (WmsProductPut wmsProductPut1 : - wmsProductPutList) { + for (WmsProductPut wmsProductPut1 : wmsProductPutList) { + SapHandMadeInStorage sapHandMadeInStorage = new SapHandMadeInStorage(); + sapHandMadeInStorage.setMaterialDesc(wmsProductPut1.getProductName()); + sapHandMadeInStorage.setMaterialCode(wmsProductPut1.getProductCode()); + sapHandMadeInStorage.setBatchCode(getBatchCode(wmsProductPut1.getBatchNumber())); + sapHandMadeInStorage.setWarehouse(wmsProductPut1.getWaCode()); + sapHandMadeInStorage.setFactoryNo(wmsProductPut.getFactoryCode()); + sapHandMadeInStorage.setCreateTime(DateUtils.parseDateToStr("yyyyMMdd", new Date())); + sapHandMadeInStorage.setCreateBy(wmsProductPut.getCreateBy()); + + sapHandMadeInStorageList.add(sapHandMadeInStorage); //根据下面的记录--先查询对应订单,如果有原来的订单的话,就在原来的订单上进行修改,如果没有就先插入,如果有就修改数量 WmsProductPut wmsProductPutk = new WmsProductPut(); //wms_product_put @@ -1368,6 +1382,7 @@ public class WmsProductPutServiceImpl implements IWmsProductPutService { // wmsProductPutMapper.updateProOrderWorkorderBatchPallet(wmsProductPut1.getSn()); } + remoteSapService.handMadeInStorage(sapHandMadeInStorageList); return SUCCESS; }finally { DynamicDataSourceContextHolder.poll(); @@ -1375,6 +1390,25 @@ public class WmsProductPutServiceImpl implements IWmsProductPutService { } + /** 获取批次号 **/ + private String getBatchCode(String str){ + String batchCode = ""; + + if (StringUtils.isBlank(str)){ + throw new RuntimeException("批次号为空!"); + } + + if (str.length() == 24){ + //截取12位到22位 + batchCode = str.substring(12,22); + }else { + batchCode = str; + } + + return batchCode; + } + + @Override public List selectQueryFinishedProductSalesTS(WmsSellOutEmbryo wmsSellOutEmbryo) { //wms_sell_out_embryo From b06d7c038d8518af72e58452d3b617f5655371ef Mon Sep 17 00:00:00 2001 From: FCD <2453864257@qq.com> Date: Thu, 16 Oct 2025 11:44:07 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=A4=87=E5=93=81=E5=A4=87=E4=BB=B6?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E6=8E=92=E5=BA=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/mapper/device/SparePartsLedgerMapper.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/op-modules/op-device/src/main/resources/mapper/device/SparePartsLedgerMapper.xml b/op-modules/op-device/src/main/resources/mapper/device/SparePartsLedgerMapper.xml index 6b986a897..a13870f6b 100644 --- a/op-modules/op-device/src/main/resources/mapper/device/SparePartsLedgerMapper.xml +++ b/op-modules/op-device/src/main/resources/mapper/device/SparePartsLedgerMapper.xml @@ -144,6 +144,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and TRY_CAST(safe_stock AS DECIMAL(18,2)) <= amount and del_flag = '0' + ORDER BY + CASE WHEN TRY_CONVERT(numeric(18,2), safe_stock) > amount THEN 0 ELSE 1 END, + gmt_modified DESC, + gmt_create DESC SELECT - id, - in_out_type, - order_no, - spare_code, - spare_name, - amount, - attr1, - attr2, - attr3, - esio.create_by, - esio.create_time, - esio.update_by, - esio.update_time, - esio.del_flag, - factory_code, - storage_id, - su.nick_name - FROM - equ_spareparts_in_out esio + esio.id, + esio.in_out_type, + esio.order_no, + esio.spare_code, + esio.spare_name, + esio.amount, + esio.attr1, + esio.attr2, + esio.attr3, + esio.create_by, + esio.create_time, + esio.update_by, + esio.update_time, + esio.del_flag, + esio.factory_code, + esio.storage_id, + su.nick_name, + esl.unit_price, + (esl.unit_price * esio.amount) allPrice + FROM equ_spareparts_in_out esio LEFT JOIN lanju_op_cloud.dbo.sys_user su ON esio.create_by = su.user_name + LEFT JOIN equ_spareparts_ledger esl ON esio.spare_code = esl.material_code AND esl.del_flag = 0 and in_out_type = #{inOutType} and order_no = #{orderNo}