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 01133f13e..e35333810 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 @@ -156,6 +156,9 @@ public interface RemoteSapService { @PostMapping("/sap/handMadeInStorage") public R handMadeInStorage(@RequestBody List list); + @PostMapping("/sap/updateMaterialEntry") + R updateMaterialEntry(@RequestBody List list, @RequestParam("optionType") String optionType // 关键:指定value + ); } diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapMaterialEntry.java b/op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapMaterialEntry.java new file mode 100644 index 000000000..d9e74c6d8 --- /dev/null +++ b/op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapMaterialEntry.java @@ -0,0 +1,71 @@ +package com.op.system.api.domain.sap; + +/** + * remark + * + * @author 019117 + * @date + */ +public class SapMaterialEntry { + + private String materialCode; + + + private String batchCode; + + private String factoryCode; + + private String areaCode; + + private String status; + + private String userCode; + + 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 getFactoryCode() { + return factoryCode; + } + + public void setFactoryCode(String factoryCode) { + this.factoryCode = factoryCode; + } + + public String getAreaCode() { + return areaCode; + } + + public void setAreaCode(String areaCode) { + this.areaCode = areaCode; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getUserCode() { + return userCode; + } + + public void setUserCode(String userCode) { + this.userCode = userCode; + } +} 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 0e15409a6..1def8ec25 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 @@ -193,6 +193,11 @@ public class RemoteSapFallbackFactory implements FallbackFactory list, String optionType) { + 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 fccbe7843..b87c0d430 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 @@ -652,4 +652,13 @@ public class SapController extends BaseController { public R handMadeInStorage(@RequestBody List list) { return sapOrderService.handMadeInStorage(list); } + + /** + * 手持成品物料收货入库 + * **/ + @PostMapping("/updateMaterialEntry") + @Log(title = "物料库区填报", businessType = BusinessType.SAP) + public R updateMaterialEntry(@RequestBody List list, @RequestParam("optionType") String optionType) { + return sapWmsService.updateMaterialEntry(list, optionType); + } } diff --git a/op-modules/op-sap/src/main/java/com/op/sap/service/SapWmsService.java b/op-modules/op-sap/src/main/java/com/op/sap/service/SapWmsService.java index 6c9debd31..8afc9e00a 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/service/SapWmsService.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/service/SapWmsService.java @@ -1,6 +1,10 @@ package com.op.sap.service; import com.op.common.core.domain.R; +import com.op.system.api.domain.sap.SapHandMadeInStorage; +import com.op.system.api.domain.sap.SapMaterialEntry; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; import java.util.Map; @@ -14,4 +18,6 @@ public interface SapWmsService { R sapProductOutboundCostCenter(List> mapList); R sapProductOutboundCostTW(List> mapList); + + R updateMaterialEntry(List list, String optionType) ; } diff --git a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapWmsServicelmpl.java b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapWmsServicelmpl.java index 10d7102c7..a932ea1d8 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapWmsServicelmpl.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapWmsServicelmpl.java @@ -3,17 +3,17 @@ package com.op.sap.service.impl; import com.op.common.core.domain.R; import com.op.common.core.utils.StringUtils; import com.op.sap.service.SapWmsService; +import com.op.system.api.domain.sap.SapHandMadeInStorage; +import com.op.system.api.domain.sap.SapMaterialEntry; import com.sap.conn.jco.*; +import org.apache.commons.collections4.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Component @Service @@ -318,4 +318,61 @@ public class SapWmsServicelmpl implements SapWmsService { return R.fail(e.getMessage()); } } + + @Override + public R updateMaterialEntry(List list, String optionType) { + + if (CollectionUtils.isEmpty(list)) { + throw new RuntimeException("参数list不存在,或长度为0"); + } + + if (StringUtils.isBlank(optionType)) { + throw new RuntimeException("没有指定读写操作"); + } + + try { + JCoRepository repository = dest.getRepository(); + JCoFunction sapFunction = repository.getFunction("ZMB_MODIFY_ZMMKW"); + + if ("1".equals(optionType)){ + sapFunction.getImportParameterList().setValue("P_WRITE", "X"); + } + if ("2".equals(optionType)){ + sapFunction.getImportParameterList().setValue("P_DELETE", "X"); + } + + Date now = new Date(); + + JCoTable table = sapFunction.getTableParameterList().getTable("IN_ZMMKW"); + for (SapMaterialEntry item : list) { + table.appendRow(); + //物料编码 + table.setValue("MATNR", "0000000" + item.getMaterialCode()); + //批次 + table.setValue("CHARG", item.getBatchCode()); + //工厂 + table.setValue("WERKS", item.getFactoryCode()); + //区位 + table.setValue("ABLAD", item.getAreaCode()); + //状态 + table.setValue("ZTYPE", item.getStatus()); + //修改人 + table.setValue("ZNAME", item.getUserCode()); + //修改日期 + table.setValue("ZMDDAT", now); + } + + sapFunction.execute(dest); + String code = sapFunction.getExportParameterList().getString("RETCODE"); + String msg = sapFunction.getExportParameterList().getString("RETMSG"); + if (!"0".equals(code)) { + throw new Exception("提交物料库区填报失败:"+msg); + } + return R.ok(); + }catch (Exception e){ + e.printStackTrace(); + log.error(e.getMessage()); + return R.fail(e.getMessage()); + } + } } diff --git a/op-modules/op-wms/src/main/java/com/op/wms/controller/WmsToWCSmissionController.java b/op-modules/op-wms/src/main/java/com/op/wms/controller/WmsToWCSmissionController.java index d344411ce..8a7c28a67 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/controller/WmsToWCSmissionController.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/controller/WmsToWCSmissionController.java @@ -4,6 +4,7 @@ package com.op.wms.controller; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.op.common.core.domain.R; +import com.op.common.core.utils.JwtUtils; import com.op.common.core.utils.StringUtils; import com.op.common.core.utils.uuid.IdUtils; import com.op.common.core.web.domain.AjaxResult; @@ -1004,4 +1005,23 @@ public class WmsToWCSmissionController { String result = odsProcureOrderService.upbatCardXNew(order); return success(result); } + + /** + * 查询需要填写的成品 + * **/ + @GetMapping("/wmsStockAreaEntryList") + public AjaxResult getStockAreaEntryList(WmsStockAreaEntry params) { + List list = odsProcureOrderService.getStockAreaEntryList(params); + return AjaxResult.success(list); + } + + /** + * 提交成品入库 + * **/ + @PostMapping("/submitMaterialEntry") + public AjaxResult submitMaterialEntry(@RequestBody List list) { + odsProcureOrderService.submitMaterialEntry(list); + return AjaxResult.success(); + } + } diff --git a/op-modules/op-wms/src/main/java/com/op/wms/domain/WmsStockAreaEntry.java b/op-modules/op-wms/src/main/java/com/op/wms/domain/WmsStockAreaEntry.java new file mode 100644 index 000000000..ace8690a4 --- /dev/null +++ b/op-modules/op-wms/src/main/java/com/op/wms/domain/WmsStockAreaEntry.java @@ -0,0 +1,159 @@ +package com.op.wms.domain; + + +import com.op.common.core.web.domain.BaseEntity; + +/** + * remark + * + * @author 019117 + * @date + */ +public class WmsStockAreaEntry extends BaseEntity { + + private Long id; + + /** + * 生产日期 + * **/ + private String productionDate; + + /** + * 工单号 + * **/ + private String workOrderCode; + + + /** + * 工单状态 + * **/ + private String status; + + /** + * 物料编码 + * **/ + private String materialCode; + + /** + * 物料名称 + * **/ + private String materialName; + + /** + * 批次编码 + * **/ + private String batchCode; + + /** + * 工厂编码 + * **/ + private String factoryCode; + + /** + * 地点 + * **/ + private String location; + + /** + * 区号 + * **/ + private String areaCode; + + /** + * 查询-生产开始时间 + * **/ + private String beginDate; + + /** + * 查询-生产结束时间 + * **/ + private String endDate; + + public String getProductionDate() { + return productionDate; + } + + public void setProductionDate(String productionDate) { + this.productionDate = productionDate; + } + + public String getWorkOrderCode() { + return workOrderCode; + } + + public void setWorkOrderCode(String workOrderCode) { + this.workOrderCode = workOrderCode; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getMaterialCode() { + return materialCode; + } + + public void setMaterialCode(String materialCode) { + this.materialCode = materialCode; + } + + public String getMaterialName() { + return materialName; + } + + public void setMaterialName(String materialName) { + this.materialName = materialName; + } + + public String getBatchCode() { + return batchCode; + } + + public void setBatchCode(String batchCode) { + this.batchCode = batchCode; + } + + public String getFactoryCode() { + return factoryCode; + } + + public void setFactoryCode(String factoryCode) { + this.factoryCode = factoryCode; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getAreaCode() { + return areaCode; + } + + public void setAreaCode(String areaCode) { + this.areaCode = areaCode; + } + + public String getBeginDate() { + return beginDate; + } + + public void setBeginDate(String beginDate) { + this.beginDate = beginDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } +} diff --git a/op-modules/op-wms/src/main/java/com/op/wms/mapper/OdsProcureOutOrderMapper.java b/op-modules/op-wms/src/main/java/com/op/wms/mapper/OdsProcureOutOrderMapper.java index e88b051b4..404823bce 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/mapper/OdsProcureOutOrderMapper.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/mapper/OdsProcureOutOrderMapper.java @@ -3,10 +3,7 @@ package com.op.wms.mapper; import java.util.List; import com.op.system.api.domain.sap.SapMaterialPosting; -import com.op.wms.domain.OdsProcureOrder; -import com.op.wms.domain.OdsProcureOutOrder; -import com.op.wms.domain.WmsOdsEmStorageNews; -import com.op.wms.domain.WmsOdsMateStorageNews; +import com.op.wms.domain.*; import org.apache.ibatis.annotations.Param; /** @@ -185,4 +182,10 @@ public interface OdsProcureOutOrderMapper { int removeReturn(String[] IDs); List selectWmsOdsProcureReturnOrderByProduceCode(String order); + + List getStockAreaEntryList(WmsStockAreaEntry params); + + List batchCheckDuplication(List list ); + + void batchInsertMaterialEntry(List list); } diff --git a/op-modules/op-wms/src/main/java/com/op/wms/service/IOdsProcureOrderService.java b/op-modules/op-wms/src/main/java/com/op/wms/service/IOdsProcureOrderService.java index 37cec3ccd..82e13d7dc 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/service/IOdsProcureOrderService.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/service/IOdsProcureOrderService.java @@ -164,4 +164,8 @@ public interface IOdsProcureOrderService { List selectOrderCardTLTWO(OdsProcureOrder odsProcureOrder); void batchSapTl(List orderList); + + List getStockAreaEntryList(WmsStockAreaEntry params); + + void submitMaterialEntry(List list); } diff --git a/op-modules/op-wms/src/main/java/com/op/wms/service/impl/OdsProcureOrderServiceImpl.java b/op-modules/op-wms/src/main/java/com/op/wms/service/impl/OdsProcureOrderServiceImpl.java index 5dd781995..584f87ed4 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/service/impl/OdsProcureOrderServiceImpl.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/service/impl/OdsProcureOrderServiceImpl.java @@ -26,6 +26,7 @@ import com.op.system.api.RemoteQualityService; import com.op.system.api.RemoteSapService; import com.op.system.api.domain.quality.QcCheckTaskIncomeDTO; import com.op.system.api.domain.sap.SapBackflushMPQuery; +import com.op.system.api.domain.sap.SapMaterialEntry; import com.op.system.api.domain.sap.SapMaterialPosting; import com.op.system.api.domain.sap.SapPurchaseOrderQuery; import okhttp3.OkHttpClient; @@ -36,6 +37,7 @@ import okhttp3.Response; import java.io.IOException; +import java.util.stream.Collectors; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; @@ -4063,4 +4065,44 @@ public class OdsProcureOrderServiceImpl implements IOdsProcureOrderService { OutboundPostingzcSAPTH(orderList1); } } + + @Override + @DS("#header.poolName") + public List getStockAreaEntryList(WmsStockAreaEntry params) { + return odsProcureOutOrderMapper.getStockAreaEntryList(params); + } + + @Override + @DS("#header.poolName") + public void submitMaterialEntry(List list) { + + List sapList = new ArrayList<>(); + + List duplicationList = odsProcureOutOrderMapper.batchCheckDuplication(list); + + if (!duplicationList.isEmpty()){ + List materialCodeList = duplicationList.stream().map(WmsStockAreaEntry::getMaterialCode).collect(Collectors.toList()); + throw new RuntimeException("物料:"+materialCodeList+"存在重复数据"); + } + + for (WmsStockAreaEntry item : list){ + SapMaterialEntry entry = new SapMaterialEntry(); + + entry.setMaterialCode(item.getMaterialCode()); + entry.setBatchCode(item.getBatchCode()); + entry.setFactoryCode(item.getFactoryCode()); + entry.setAreaCode(item.getAreaCode()); + entry.setStatus(item.getStatus()); + entry.setUserCode(item.getCreateBy()); + + sapList.add(entry); + } + + //提交记录 + odsProcureOutOrderMapper.batchInsertMaterialEntry(list); + + + //提交到sap + remoteSapService.updateMaterialEntry(sapList,"1"); + } } diff --git a/op-modules/op-wms/src/main/resources/mapper/wms/OdsProcureOutOrderMapper.xml b/op-modules/op-wms/src/main/resources/mapper/wms/OdsProcureOutOrderMapper.xml index c00adf109..134972833 100644 --- a/op-modules/op-wms/src/main/resources/mapper/wms/OdsProcureOutOrderMapper.xml +++ b/op-modules/op-wms/src/main/resources/mapper/wms/OdsProcureOutOrderMapper.xml @@ -2141,4 +2141,66 @@ and wms_ods_procure_return_order.User_Defined10!='2' and Order_Status='3' + + + + + + + + + INSERT INTO wms_material_entry ( + work_order_code, + material_code, + batch_code, + factory_code, + location, + area_code, + status, + create_time, + create_by + ) + VALUES + + ( + #{item.workOrderCode}, + #{item.materialCode}, + #{item.batchCode}, + #{item.factoryCode}, + #{item.location}, + #{item.areaCode}, + #{item.status}, + GETDATE(), + #{item.createBy} + ) + +