From 09e0b3e249c10eb1819f43d810742a46af1ec300 Mon Sep 17 00:00:00 2001 From: zhaoxiaolin Date: Fri, 22 Sep 2023 11:21:09 +0800 Subject: [PATCH] =?UTF-8?q?sap+=E8=AE=A1=E5=88=92=E7=9A=84bug=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../op/system/api/domain/sap/SapCustom.java | 66 +++++ .../op/system/api/domain/sap/SapSupplier.java | 83 ++++++ .../src/main/java/com/op/job/task/RyTask.java | 3 +- .../controller/ProWhiteOrderController.java | 56 ++++ .../java/com/op/plan/domain/ProOrder.java | 3 +- .../service/impl/ProOrderServiceImpl.java | 26 +- .../resources/mapper/plan/ProOrderMapper.xml | 4 +- .../plan/ProOrderWorkorderBatchMapper.xml | 4 +- .../mapper/plan/ProOrderWorkorderMapper.xml | 4 +- .../com/op/sap/controller/SapController.java | 29 +- .../op/sap/domain/SapMaterialPreparation.java | 125 ++++++++ .../com/op/sap/domain/vo/SapBomQuery.java | 76 +++++ .../com/op/sap/domain/vo/SapRouterQuery.java | 55 ++++ .../com/op/sap/service/SapBomService.java | 3 +- .../op/sap/service/SapItemSyncService.java | 3 +- .../com/op/sap/service/SapRouterService.java | 3 +- .../op/sap/service/SapWorkCenterService.java | 6 +- .../sap/service/impl/SapBomServiceImpl.java | 78 +++-- .../op/sap/service/impl/SapItemSyncImpl.java | 154 ++++++++-- .../SapMaterialPreparationServiceImpl.java | 6 + .../sap/service/impl/SapOrderServiceImpl.java | 2 +- .../service/impl/SapRouterServiceImpl.java | 280 +++++++++++------- .../impl/SapWorkCenterServiceImpl.java | 122 +++++--- .../java/com/op/sap/util/SAPConnUtils.java | 1 + .../mapper/sap/SapProProcessMapper.xml | 2 +- .../mapper/sap/SapProRouteMapper.xml | 6 +- .../com/op/technology/domain/ProRoute.java | 10 + .../mapper/technology/ProRouteMapper.xml | 6 +- .../technology/ProRouteProductMapper.xml | 6 +- 29 files changed, 988 insertions(+), 234 deletions(-) create mode 100644 op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapCustom.java create mode 100644 op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapSupplier.java create mode 100644 op-modules/op-sap/src/main/java/com/op/sap/domain/SapMaterialPreparation.java create mode 100644 op-modules/op-sap/src/main/java/com/op/sap/domain/vo/SapBomQuery.java create mode 100644 op-modules/op-sap/src/main/java/com/op/sap/domain/vo/SapRouterQuery.java diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapCustom.java b/op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapCustom.java new file mode 100644 index 00000000..9c5560af --- /dev/null +++ b/op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapCustom.java @@ -0,0 +1,66 @@ +package com.op.system.api.domain.sap; + +public class SapCustom { + /* + BUKRS 公司代码 + KUNNR 客户编号 + NAME1 客户名称 + TELF1 第一个电话号 + STRAS 住宅号及街道 + ERDAT 记录创建日期 + */ + private String bukrs; + private String kunnr; + private String name1; + private String telf1; + private String stras; + private String erdat; + + public String getBukrs() { + return bukrs; + } + + public void setBukrs(String bukrs) { + this.bukrs = bukrs; + } + + public String getKunnr() { + return kunnr; + } + + public void setKunnr(String kunnr) { + this.kunnr = kunnr; + } + + public String getName1() { + return name1; + } + + public void setName1(String name1) { + this.name1 = name1; + } + + public String getTelf1() { + return telf1; + } + + public void setTelf1(String telf1) { + this.telf1 = telf1; + } + + public String getStras() { + return stras; + } + + public void setStras(String stras) { + this.stras = stras; + } + + public String getErdat() { + return erdat; + } + + public void setErdat(String erdat) { + this.erdat = erdat; + } +} diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapSupplier.java b/op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapSupplier.java new file mode 100644 index 00000000..d4667590 --- /dev/null +++ b/op-api/op-api-system/src/main/java/com/op/system/api/domain/sap/SapSupplier.java @@ -0,0 +1,83 @@ +package com.op.system.api.domain.sap; + +import com.op.common.core.web.domain.BaseEntity; + +import java.util.Date; + +public class SapSupplier extends BaseEntity { + /*BUKRS 公司代码 + LIFNR 供应商 + NAME1 供应商名称 + TELF1 第一个电话号 + STRAS 住宅号及街道 + ERDAT 记录创建日期*/ + + private String bukrs; + private String lifnr; + private String name1; + private String telf1; + private String stras; + private String erdat; + + + + public String getBukrs() { + return bukrs; + } + + public void setBukrs(String bukrs) { + this.bukrs = bukrs; + } + + public String getLifnr() { + return lifnr; + } + + public void setLifnr(String lifnr) { + this.lifnr = lifnr; + } + + public String getName1() { + return name1; + } + + public void setName1(String name1) { + this.name1 = name1; + } + + public String getTelf1() { + return telf1; + } + + public void setTelf1(String telf1) { + this.telf1 = telf1; + } + + public String getStras() { + return stras; + } + + public void setStras(String stras) { + this.stras = stras; + } + + public String getErdat() { + return erdat; + } + + public void setErdat(String erdat) { + this.erdat = erdat; + } + + @Override + public String toString() { + return "SapSupplier{" + + "bukrs='" + bukrs + '\'' + + ", lifnr='" + lifnr + '\'' + + ", name1='" + name1 + '\'' + + ", telf1='" + telf1 + '\'' + + ", stras='" + stras + '\'' + + ", erdat='" + erdat + '\'' + + '}'; + } +} diff --git a/op-modules/op-job/src/main/java/com/op/job/task/RyTask.java b/op-modules/op-job/src/main/java/com/op/job/task/RyTask.java index c82a14e8..54a1bfa6 100644 --- a/op-modules/op-job/src/main/java/com/op/job/task/RyTask.java +++ b/op-modules/op-job/src/main/java/com/op/job/task/RyTask.java @@ -64,8 +64,7 @@ public class RyTask { remoteSapService.sapRouterSync(); } - /**每天21点00更新明日订单执行 - * 0 00 21 * * ? + /**每2小时执行一次更新当日订单 */ public void getTOrderTask(){ logger.info("++同步今日订单+开始++getTOrderTask+++++"); diff --git a/op-modules/op-plan/src/main/java/com/op/plan/controller/ProWhiteOrderController.java b/op-modules/op-plan/src/main/java/com/op/plan/controller/ProWhiteOrderController.java index 4cad2a16..ef7c7ca0 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/controller/ProWhiteOrderController.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/controller/ProWhiteOrderController.java @@ -1,8 +1,12 @@ package com.op.plan.controller; +import java.io.IOException; +import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletResponse; +import com.op.common.core.utils.DateUtils; +import com.op.common.security.utils.SecurityUtils; import com.op.plan.service.IProWhiteOrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -21,6 +25,7 @@ import com.op.plan.service.IProOrderService; import com.op.common.core.web.controller.BaseController; import com.op.common.core.web.domain.AjaxResult; import com.op.common.core.utils.poi.ExcelUtil; +import org.springframework.web.multipart.MultipartFile; import static com.op.common.core.web.domain.AjaxResult.success; @@ -107,4 +112,55 @@ public class ProWhiteOrderController { public AjaxResult remove(@PathVariable String[] ids) { return proWhiteOrderService.deleteProOrderByIds(ids); } + + /** + * 导入订单信息接口(有问题不启用) + * + * @param file + * @return + * @throws Exception + */ + @Log(title = "导入订单信息", businessType = BusinessType.IMPORT) + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file) throws Exception { + // 创建接收对象 + ExcelUtil util = new ExcelUtil<>(ProOrder.class); + // 接收表格信息 + List orderList = util.importExcel(file.getInputStream()); + + return null;//proOrderService.importOrder(orderList); + } + + /** + * 生成订单信息模板(有问题不启用) + * + * @param response + * @throws IOException + */ + @PostMapping("/importTemplate") + @Log(title = "生成订单模板", businessType = BusinessType.EXPORT) + public void importTemplate(HttpServletResponse response) throws IOException { + ExcelUtil util = new ExcelUtil<>(ProOrder.class); + + List orderList = new ArrayList<>(); + ProOrder example = new ProOrder(); + example.setPlanFactoryCode("000000"); + example.setOrderType("LJ01"); + example.setOrderCode("000000"); + example.setProdCode("000000"); + example.setProdDesc("物料名称样例"); + example.setQuantity(100L); + example.setUnit("KAR"); + example.setWorkerOrder("510000"); + example.setProdType("prod"); + example.setStatus("o0"); + example.setParentOrder("1000000"); + example.setPlanComplete(DateUtils.getNowDate()); + example.setPlanProDate(DateUtils.getNowDate()); + example.setCreateBy(SecurityUtils.getUsername()); + example.setCreateTime(DateUtils.getNowDate()); + example.setUpdateTime(DateUtils.getNowDate()); + orderList.add(example); + util.exportExcel(response, orderList, "订单基本信息"); + } } diff --git a/op-modules/op-plan/src/main/java/com/op/plan/domain/ProOrder.java b/op-modules/op-plan/src/main/java/com/op/plan/domain/ProOrder.java index 9a65e927..d5d2a5f8 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/domain/ProOrder.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/domain/ProOrder.java @@ -21,10 +21,11 @@ public class ProOrder extends TreeEntity { private String id; /** 计划工厂编码 */ - @Excel(name = "计划工厂编码") + private String planFactoryCode; /** 工厂编码 */ + @Excel(name = "计划工厂编码") private String factoryCode; /** 订单类型 */ diff --git a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderServiceImpl.java b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderServiceImpl.java index c17a49c7..7b99a2de 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderServiceImpl.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderServiceImpl.java @@ -408,7 +408,6 @@ public class ProOrderServiceImpl implements IProOrderService { return success(); } - @Transactional(rollbackFor = Exception.class) public String syncSAPFunc(List newOrders){ String failOrder = ""; ProOrder proOrder = null; @@ -420,15 +419,15 @@ public class ProOrderServiceImpl implements IProOrderService { } return failOrder; } - @Transactional(rollbackFor = Exception.class) + public String syncImportFunc(List newOrders){ String failOrder = ""; for (ProOrder proOrder:newOrders) { - failOrder += syncFunc(proOrder); + failOrder += syncFunc(proOrder)+","; } return failOrder; } - + @Transactional(rollbackFor = Exception.class) public String syncFunc(ProOrder proOrder){ String failOrder = ""; //pro_order_workorder @@ -449,12 +448,12 @@ public class ProOrderServiceImpl implements IProOrderService { if (CollectionUtils.isEmpty(workOrders)) {//更新 proOrder.setUpdateTime(nowDate); proOrder.setUpdateBy(SecurityUtils.getUsername()); - //如果工单没下达,则更新pro_order + //如果工单没开始,则更新pro_order proOrderMapper.updateProOrder(proOrder); - List orderCodes = this.getListByPCode(proOrder); + List orderCodes = this.getListBySonCode(proOrder); if (!CollectionUtils.isEmpty(orderCodes)) { List idstr = orderCodes.stream().map(order -> order.getId()).collect(Collectors.toList()); - String[] ids = idstr.stream().toArray(String[]::new); + String[] ids = idstr.stream().toArray(String[]::new);//订单id //删除批次pro_order_workorder_batch proOrderWorkorderBatchMapper.deleteProOrderWorkorderBatchByWorkorderIds(ids); //删除工单pro_order_workorder @@ -480,7 +479,16 @@ public class ProOrderServiceImpl implements IProOrderService { } return codeList; } - + //子查父递归 + public List getListBySonCode(ProOrder pOrder) { + List codeList = new ArrayList<>(); + codeList.add(pOrder); + List parentOrder = proOrderMapper.selectParentProOrderByCode(pOrder.getParentOrder()); + if (!CollectionUtils.isEmpty(parentOrder)) { + getListBySonCode(parentOrder.get(0)); + } + return codeList; + } /** * 处理表格信息 @@ -641,7 +649,7 @@ public class ProOrderServiceImpl implements IProOrderService { DynamicDataSourceContextHolder.push(poolName);// 这是数据源的key SapProOrder sapqo = new SapProOrder();//proOrderMapper.getMaxCreatetime(); Calendar calendar = Calendar.getInstance(); - calendar.add(Calendar.DAY_OF_MONTH,1); +// calendar.add(Calendar.DAY_OF_MONTH,1);//明天 sapqo.setCreateTime(calendar.getTime()); sapqo.setFactoryCode(poolName.replace("ds_","")); diff --git a/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderMapper.xml b/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderMapper.xml index 463341c6..c124041b 100644 --- a/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderMapper.xml +++ b/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderMapper.xml @@ -143,7 +143,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - where workorder_code = #{workorderId} or workorder_id = #{workorderId} + where (workorder_code = #{workorderId} or workorder_id = #{workorderId}) and del_flag = '0' @@ -422,7 +422,7 @@ update pro_order_workorder set del_flag = '1' - where workorder_id in + where order_id in #{workorderId} 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 62579b68..6937da6a 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 @@ -4,11 +4,13 @@ import com.op.common.core.domain.R; import com.op.common.core.web.controller.BaseController; import com.op.common.log.annotation.Log; import com.op.common.log.enums.BusinessType; +import com.op.sap.domain.vo.SapBomQuery; +import com.op.sap.domain.vo.SapRouterQuery; import com.op.sap.service.*; -import com.op.system.api.domain.sap.SapCreateOrder; -import com.op.system.api.domain.sap.SapMaterialPreparation; -import com.op.system.api.domain.sap.SapRFW; +import com.op.system.api.domain.sap.*; +import com.op.system.api.domain.sap.SapCustom; +import com.op.system.api.domain.sap.SapSupplier; import com.op.system.api.model.SapProOrder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -49,12 +51,13 @@ public class SapController extends BaseController { /** * 物料同步接口 + * @param sapBaseProduct * @return */ @PostMapping("/itemSync") @Log(title = "同步SAP物料清单", businessType = BusinessType.SAP) - public R itemSync(){ - return sapItemSyncService.itemSync(); + public R itemSync(@RequestBody SapBaseProduct sapBaseProduct){ + return sapItemSyncService.itemSync(sapBaseProduct); } /** @@ -63,8 +66,8 @@ public class SapController extends BaseController { */ @PostMapping("/bomSync") @Log(title = "同步SAP物料组件清单", businessType = BusinessType.SAP) - public R bomSync(){ - return sapBomService.bomSync(); + public R bomSync(@RequestBody SapBomQuery sapBomQuery){ + return sapBomService.bomSync(sapBomQuery); } /** @@ -120,8 +123,8 @@ public class SapController extends BaseController { */ @PostMapping("/sapRouterSync") @Log(title = "工艺路线同步接口", businessType = BusinessType.SAP) - public R sapRouerSync() { - return sapRouterService.sapRouterSync(); + public R sapRouerSync(@RequestBody SapRouterQuery sapRouterQuery) { + return sapRouterService.sapRouterSync(sapRouterQuery); } /** @@ -137,8 +140,8 @@ public class SapController extends BaseController { */ @PostMapping("/sapSupplierSync") @Log(title = "供应商主数据", businessType = BusinessType.SAP) - public R sapSupplierSync(){ - return sapWorkCenterService.sapSupplierSync(); + public R sapSupplierSync(@RequestBody SapSupplier sapSupplier){ + return sapWorkCenterService.sapSupplierSync(sapSupplier); } /** @@ -148,8 +151,8 @@ public class SapController extends BaseController { @PostMapping("/sapCustomSync") @Log(title = "客户主数据", businessType = BusinessType.SAP) - public R sapCustomSync(){ - return sapWorkCenterService.sapCustomSync(); + public R sapCustomSync(@RequestBody SapCustom sapCustom){ + return sapWorkCenterService.sapCustomSync(sapCustom); } } diff --git a/op-modules/op-sap/src/main/java/com/op/sap/domain/SapMaterialPreparation.java b/op-modules/op-sap/src/main/java/com/op/sap/domain/SapMaterialPreparation.java new file mode 100644 index 00000000..2981cdd7 --- /dev/null +++ b/op-modules/op-sap/src/main/java/com/op/sap/domain/SapMaterialPreparation.java @@ -0,0 +1,125 @@ +package com.op.sap.domain; + + +public class SapMaterialPreparation { + //订单号 + private String AUFNR; + //预留/相关需求的项目编号 + private String RSPOS; + //物料号 + private String MATNR; + //物料描述(短文本) + private String MAKTX; + //工厂 + private String WERKS; + //库存地点 + private String LGORT; + //组件的需求日期 + private String BDTER; + //需求量 + private String BDMNG; + //欠料数量 + private String ZQLSL; + //基本计量单位 + private String MEINS; + //标识:反冲 + private String RGEKZ; + //直接采购标识 + private String DBSKZ; + + public String getAUFNR() { + return AUFNR; + } + + public void setAUFNR(String AUFNR) { + this.AUFNR = AUFNR; + } + + public String getRSPOS() { + return RSPOS; + } + + public void setRSPOS(String RSPOS) { + this.RSPOS = RSPOS; + } + + public String getMATNR() { + return MATNR; + } + + public void setMATNR(String MATNR) { + this.MATNR = MATNR; + } + + public String getMAKTX() { + return MAKTX; + } + + public void setMAKTX(String MAKTX) { + this.MAKTX = MAKTX; + } + + public String getWERKS() { + return WERKS; + } + + public void setWERKS(String WERKS) { + this.WERKS = WERKS; + } + + public String getLGORT() { + return LGORT; + } + + public void setLGORT(String LGORT) { + this.LGORT = LGORT; + } + + public String getBDTER() { + return BDTER; + } + + public void setBDTER(String BDTER) { + this.BDTER = BDTER; + } + + public String getBDMNG() { + return BDMNG; + } + + public void setBDMNG(String BDMNG) { + this.BDMNG = BDMNG; + } + + public String getZQLSL() { + return ZQLSL; + } + + public void setZQLSL(String ZQLSL) { + this.ZQLSL = ZQLSL; + } + + public String getMEINS() { + return MEINS; + } + + public void setMEINS(String MEINS) { + this.MEINS = MEINS; + } + + public String getRGEKZ() { + return RGEKZ; + } + + public void setRGEKZ(String RGEKZ) { + this.RGEKZ = RGEKZ; + } + + public String getDBSKZ() { + return DBSKZ; + } + + public void setDBSKZ(String DBSKZ) { + this.DBSKZ = DBSKZ; + } +} diff --git a/op-modules/op-sap/src/main/java/com/op/sap/domain/vo/SapBomQuery.java b/op-modules/op-sap/src/main/java/com/op/sap/domain/vo/SapBomQuery.java new file mode 100644 index 00000000..055df450 --- /dev/null +++ b/op-modules/op-sap/src/main/java/com/op/sap/domain/vo/SapBomQuery.java @@ -0,0 +1,76 @@ +package com.op.sap.domain.vo; + +public class SapBomQuery { + /* + WERKS 工厂 + MATNR 物料号 + MATKL 物料组 + VERID 生产版本 + STLNR BOM单号 + ANDAT 记录创建日期 新增 + AEDAT 更改日期 新增 + */ + private String werks; + private String matnr; + private String matkl; + private String verid; + private String stlnr; + private String andat; + private String aedat; + + public String getWerks() { + return werks; + } + + public void setWerks(String werks) { + this.werks = werks; + } + + public String getMatnr() { + return matnr; + } + + public void setMatnr(String matnr) { + this.matnr = matnr; + } + + public String getMatkl() { + return matkl; + } + + public void setMatkl(String matkl) { + this.matkl = matkl; + } + + public String getVerid() { + return verid; + } + + public void setVerid(String verid) { + this.verid = verid; + } + + public String getStlnr() { + return stlnr; + } + + public void setStlnr(String stlnr) { + this.stlnr = stlnr; + } + + public String getAndat() { + return andat; + } + + public void setAndat(String andat) { + this.andat = andat; + } + + public String getAedat() { + return aedat; + } + + public void setAedat(String aedat) { + this.aedat = aedat; + } +} diff --git a/op-modules/op-sap/src/main/java/com/op/sap/domain/vo/SapRouterQuery.java b/op-modules/op-sap/src/main/java/com/op/sap/domain/vo/SapRouterQuery.java new file mode 100644 index 00000000..0e08eb3b --- /dev/null +++ b/op-modules/op-sap/src/main/java/com/op/sap/domain/vo/SapRouterQuery.java @@ -0,0 +1,55 @@ +package com.op.sap.domain.vo; + +public class SapRouterQuery { +/* MATNR 物料 + WERKS 工厂 + ARBPL 工作中心 + ANDAT 创建日期 + AEDAT 更改日期*/ + + private String matnr; + private String werks; + private String arbpl; + private String andat; + private String aedat; + + public String getMatnr() { + return matnr; + } + + public void setMatnr(String matnr) { + this.matnr = matnr; + } + + public String getWerks() { + return werks; + } + + public void setWerks(String werks) { + this.werks = werks; + } + + public String getArbpl() { + return arbpl; + } + + public void setArbpl(String arbpl) { + this.arbpl = arbpl; + } + + public String getAndat() { + return andat; + } + + public void setAndat(String andat) { + this.andat = andat; + } + + public String getAedat() { + return aedat; + } + + public void setAedat(String aedat) { + this.aedat = aedat; + } +} diff --git a/op-modules/op-sap/src/main/java/com/op/sap/service/SapBomService.java b/op-modules/op-sap/src/main/java/com/op/sap/service/SapBomService.java index 8de4fe3f..7d4ff752 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/service/SapBomService.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/service/SapBomService.java @@ -2,10 +2,11 @@ package com.op.sap.service; import com.op.common.core.domain.R; import com.op.common.core.web.domain.AjaxResult; +import com.op.sap.domain.vo.SapBomQuery; import com.op.system.api.domain.sap.SapBom; public interface SapBomService { - public R bomSync(); + public R bomSync(SapBomQuery sapBomQuery); SapBom getMaxRevisionBom(String STLNR); } diff --git a/op-modules/op-sap/src/main/java/com/op/sap/service/SapItemSyncService.java b/op-modules/op-sap/src/main/java/com/op/sap/service/SapItemSyncService.java index 1260ae77..c04d42c5 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/service/SapItemSyncService.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/service/SapItemSyncService.java @@ -1,6 +1,7 @@ package com.op.sap.service; import com.op.common.core.domain.R; +import com.op.system.api.domain.sap.SapBaseProduct; import java.util.List; @@ -13,5 +14,5 @@ public interface SapItemSyncService { * 物料同步 * @return */ - R itemSync(); + R itemSync(SapBaseProduct sapBaseProduct); } diff --git a/op-modules/op-sap/src/main/java/com/op/sap/service/SapRouterService.java b/op-modules/op-sap/src/main/java/com/op/sap/service/SapRouterService.java index 8b93819c..2828e82f 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/service/SapRouterService.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/service/SapRouterService.java @@ -2,8 +2,9 @@ package com.op.sap.service; import com.op.common.core.domain.R; import com.op.common.core.web.domain.AjaxResult; +import com.op.sap.domain.vo.SapRouterQuery; public interface SapRouterService { - R sapRouterSync(); + R sapRouterSync(SapRouterQuery sapRouterQuery); } diff --git a/op-modules/op-sap/src/main/java/com/op/sap/service/SapWorkCenterService.java b/op-modules/op-sap/src/main/java/com/op/sap/service/SapWorkCenterService.java index db9a72fd..23fbd318 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/service/SapWorkCenterService.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/service/SapWorkCenterService.java @@ -1,12 +1,14 @@ package com.op.sap.service; import com.op.common.core.domain.R; +import com.op.system.api.domain.sap.SapCustom; +import com.op.system.api.domain.sap.SapSupplier; public interface SapWorkCenterService { R sapWorkCenterSync(); - R sapSupplierSync(); + R sapSupplierSync(SapSupplier sapSupplier); - R sapCustomSync(); + R sapCustomSync(SapCustom sapCustom); } diff --git a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapBomServiceImpl.java b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapBomServiceImpl.java index 9cfd7cb6..666d0a49 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapBomServiceImpl.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapBomServiceImpl.java @@ -8,6 +8,7 @@ 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.core.web.domain.AjaxResult; +import com.op.sap.domain.vo.SapBomQuery; import com.op.sap.util.HandleEnum; import com.op.system.api.domain.sap.SapBom; import com.op.system.api.domain.sap.SapBomComponent; @@ -41,7 +42,7 @@ public class SapBomServiceImpl implements SapBomService { private SqlSessionFactory sqlSessionFactory; @Override - public R bomSync() { + public R bomSync(SapBomQuery sapBomQuery) { try { // 获取调用 RFC 函数对象 @@ -53,31 +54,65 @@ public class SapBomServiceImpl implements SapBomService { throw new RuntimeException("Function does not exist in SAP"); } // 配置传入参数 -// JCoTable jCoTable = func.getTableParameterList().getTable("S_STLNR"); -// jCoTable.appendRow(); -// jCoTable.setValue(Constants.SIGN, "I"); -// jCoTable.setValue(Constants.OPTION, "EQ"); -// jCoTable.setValue(Constants.LOW, "00012222"); - - JCoTable jCoTables = func.getTableParameterList().getTable("S_MATNR"); -// jCoTables.appendRow(); -// jCoTables.setValue(Constants.SIGN, "I"); -// jCoTables.setValue(Constants.OPTION, "EQ"); -// jCoTables.setValue(Constants.LOW, "000000010101000115"); - - JCoTable S_WERKS_jCoTables = func.getTableParameterList().getTable("S_WERKS"); - S_WERKS_jCoTables.appendRow(); - S_WERKS_jCoTables.setValue(Constants.SIGN, "I"); - S_WERKS_jCoTables.setValue(Constants.OPTION, "EQ"); - S_WERKS_jCoTables.setValue(Constants.LOW, "1000"); + /* + S_WERKS 工厂 + S_MATNR 物料号 + S_MATKL 物料组 + S_VERID 生产版本 + S_STLNR BOM单号 + S_ANDAT 记录创建日期 + S_AEDAT 更改日期 + */ + JCoTable S_WERKS = func.getTableParameterList().getTable("S_WERKS"); + S_WERKS.appendRow(); + S_WERKS.setValue(Constants.SIGN, "I"); + S_WERKS.setValue(Constants.OPTION, "EQ"); + S_WERKS.setValue(Constants.LOW, sapBomQuery.getWerks()); + + JCoTable S_MATNR = func.getTableParameterList().getTable("S_MATNR"); + S_MATNR.appendRow(); + S_MATNR.setValue(Constants.SIGN, "I"); + S_MATNR.setValue(Constants.OPTION, "EQ"); + S_MATNR.setValue(Constants.LOW, sapBomQuery.getMatnr()); + + JCoTable S_MATKL = func.getTableParameterList().getTable("S_MATKL"); + S_MATKL.appendRow(); + S_MATKL.setValue(Constants.SIGN, "I"); + S_MATKL.setValue(Constants.OPTION, "EQ"); + S_MATKL.setValue(Constants.LOW, sapBomQuery.getMatkl()); + + JCoTable S_VERID = func.getTableParameterList().getTable("S_VERID"); + S_VERID.appendRow(); + S_VERID.setValue(Constants.SIGN, "I"); + S_VERID.setValue(Constants.OPTION, "EQ"); + S_VERID.setValue(Constants.LOW, sapBomQuery.getVerid()); + + JCoTable S_STLNR = func.getTableParameterList().getTable("S_STLNR"); + S_STLNR.appendRow(); + S_STLNR.setValue(Constants.SIGN, "I"); + S_STLNR.setValue(Constants.OPTION, "EQ"); + S_STLNR.setValue(Constants.LOW, sapBomQuery.getStlnr()); + + + JCoTable S_ANDAT = func.getTableParameterList().getTable("S_ANDAT"); + S_ANDAT.appendRow(); + S_ANDAT.setValue(Constants.SIGN, "I"); + S_ANDAT.setValue(Constants.OPTION, "EQ"); + S_ANDAT.setValue(Constants.LOW, sapBomQuery.getAndat()); + + + JCoTable S_AEDAT = func.getTableParameterList().getTable("S_AEDAT"); + S_AEDAT.appendRow(); + S_AEDAT.setValue(Constants.SIGN, "I"); + S_AEDAT.setValue(Constants.OPTION, "EQ"); + S_AEDAT.setValue(Constants.LOW, sapBomQuery.getAedat()); + // 获取调用 RFC 函数对象 func.execute(dest); // 获取 内表 - ZMES_PRO JCoTable maraTable = func.getTableParameterList().getTable("LT_BOM"); JCoRecordMetaData metaData = maraTable.getRecordMetaData(); System.out.println("###" + metaData.toString()); - - List sapBomList=new ArrayList<>(); List sapBomComponentList=new ArrayList<>(); @@ -158,10 +193,9 @@ public class SapBomServiceImpl implements SapBomService { sapBom.setCreateTime(DateUtils.dateTime("yyyy-MM-dd", ANDAT)); sapBom.setUpdateBy(AENAM); sapBom.setUpdateTime(DateUtils.dateTime("yyyy-MM-dd", AEDAT)); - SapBomComponent sapBomComponent=new SapBomComponent(); sapBomComponent.setBomCode(STLNR); - sapBomComponent.setSite("1000"); + sapBomComponent.setSite(WERKS); sapBomComponent.setMsi(BEIKZ); sapBomComponent.setSanka(SANKA); sapBomComponent.setProductCode(MATNR); diff --git a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapItemSyncImpl.java b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapItemSyncImpl.java index 10f7206d..219b9cb1 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapItemSyncImpl.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapItemSyncImpl.java @@ -3,22 +3,43 @@ package com.op.sap.service.impl; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.op.common.core.constant.Constants; import com.op.common.core.domain.R; +import com.op.common.core.exception.ServiceException; +import com.op.common.core.utils.DateUtils; +import com.op.common.core.utils.StringUtils; +import com.op.common.core.utils.bean.BeanValidators; +import com.op.common.security.utils.SecurityUtils; import com.op.sap.mapper.SapBaseProductMapper; import com.op.sap.service.SapItemSyncService; import com.op.sap.util.SAPConnUtils; +import com.op.system.api.RemoteUserService; +import com.op.system.api.domain.SysUser; import com.op.system.api.domain.sap.SapBaseProduct; import com.sap.conn.jco.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.validation.Validator; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; @Service public class SapItemSyncImpl implements SapItemSyncService { @Autowired private SapBaseProductMapper sapBaseProductMapper; + + @Autowired + private RemoteUserService remoteUserService; + + @Autowired + protected Validator validator; + + private static final Logger log = LoggerFactory.getLogger(SapItemSyncImpl.class); @Override - public R itemSync() { + public R itemSync(SapBaseProduct sapBaseProduct) { try { // 获取调用 RFC 函数对象 //获取连接 @@ -28,20 +49,53 @@ public class SapItemSyncImpl implements SapItemSyncService { if (func == null) { throw new RuntimeException("Function does not exist in SAP"); } + /* 传参数 + S_MATNR 物料号 + S_MATKL 物料组 + S_ERSDA 创建日期 + S_LAEDA 最后更改日期*/ + if (!StringUtils.isNull(sapBaseProduct.getProductCode())){ + JCoTable jCoTables = func.getTableParameterList().getTable("S_MATNR"); + System.out.println(jCoTables); + jCoTables.appendRow(); + jCoTables.setValue(Constants.SIGN, "I"); + jCoTables.setValue(Constants.OPTION, "EQ"); + jCoTables.setValue(Constants.LOW, sapBaseProduct.getProductCode()); + } + if (!StringUtils.isNull(sapBaseProduct.getProductGroup())){ + JCoTable jCoTables = func.getTableParameterList().getTable("S_MATKL"); + System.out.println(jCoTables); + jCoTables.appendRow(); + jCoTables.setValue(Constants.SIGN, "I"); + jCoTables.setValue(Constants.OPTION, "EQ"); + jCoTables.setValue(Constants.LOW, sapBaseProduct.getProductGroup()); + } + if (!StringUtils.isNull(sapBaseProduct.getCreateTime())){ + JCoTable jCoTables = func.getTableParameterList().getTable("S_ERSDA"); + System.out.println(jCoTables); + jCoTables.appendRow(); + jCoTables.setValue(Constants.SIGN, "I"); + jCoTables.setValue(Constants.OPTION, "EQ"); + jCoTables.setValue(Constants.LOW, DateUtils.parseDateToStr("yyyyMMdd", sapBaseProduct.getCreateTime())); + } + if (!StringUtils.isNull(sapBaseProduct.getUpdateTime())){ + JCoTable jCoTables = func.getTableParameterList().getTable("S_LAEDA"); + System.out.println(jCoTables); + jCoTables.appendRow(); + jCoTables.setValue(Constants.SIGN, "I"); + jCoTables.setValue(Constants.OPTION, "EQ"); + jCoTables.setValue(Constants.LOW, DateUtils.parseDateToStr("yyyyMMdd", sapBaseProduct.getUpdateTime())); + } - JCoTable jCoTables = func.getTableParameterList().getTable("S_MATNR"); - System.out.println(jCoTables); -// jCoTables.appendRow(); -// jCoTables.setValue(Constants.SIGN, "I"); -// jCoTables.setValue(Constants.OPTION, "EQ"); -// jCoTables.setValue(Constants.LOW, "000000010101000115"); // 获取调用 RFC 函数对象 func.execute(dest); // 获取 内表 - ZMES_PRO JCoTable maraTable = func.getTableParameterList().getTable("LT_MARA"); JCoRecordMetaData metaData = maraTable.getRecordMetaData(); System.out.println("###" + metaData.toString()); + // 加载数据源 DynamicDataSourceContextHolder.push("ds_1000"); + List sapBaseProductList=new ArrayList<>(); for (int i = 0; i < maraTable.getNumRows(); i++) { SapBaseProduct baseProduct = new SapBaseProduct(); maraTable.setRow(i); @@ -75,7 +129,8 @@ public class SapItemSyncImpl implements SapItemSyncService { String MVGR4_NM = maraTable.getString("MVGR4_NM"); String MVGR5 = maraTable.getString("MVGR5"); String MVGR5_NM = maraTable.getString("MVGR5_NM"); - // String SANKA = maraTable.getString("SANKA"); + String LAEDA = maraTable.getString("LAEDA"); + String ERSDA = maraTable.getString("LAEDA"); System.out.println( "物料号:" + MATNR+ "物料描述(短文本):" + MAKTX+ @@ -102,29 +157,74 @@ public class SapItemSyncImpl implements SapItemSyncService { "物料组2:" + MVGR2+ "物料组2描述:" + MVGR2_NM+ " 物料组3:" + MVGR3+ - " 物料组描述 :" + MVGR3_NM); - //查询物料存不存在 + " 物料组描述 :" + MVGR3_NM+ + "创建日期:"+ERSDA+ + "上次更改日期:"+LAEDA); baseProduct.setProductCode(MATNR); - SapBaseProduct sapBaseProduct=sapBaseProductMapper.selectBaseProductByProductCode(baseProduct); - if (sapBaseProduct==null){ - sapBaseProduct.setProductCode(MATNR); - sapBaseProduct.setProductDescZh(MAKTX); -// baseProduct.setProductean11(EAN11); - sapBaseProduct.setProductGroup(MATKL); - sapBaseProduct.setProductGroupName(WGBEZ); - sapBaseProduct.setGrossWeight(BRGEW); - sapBaseProduct.setNetWeight(NTGEW); - sapBaseProduct.setVolume(VOLUM); - sapBaseProduct.setDelFlag("0"); - // sapBaseProductMapper.insertBaseProduct(sapBaseProduct); - } - - + baseProduct.setProductDescZh(MAKTX); + baseProduct.setProductGroup(MATKL); + baseProduct.setProductGroupName(WGBEZ); + baseProduct.setGrossWeight(BRGEW); + baseProduct.setNetWeight(NTGEW); + baseProduct.setVolume(VOLUM); + baseProduct.setDelFlag("0"); + baseProduct.setCreateBy(SecurityUtils.getUsername()); + baseProduct.setCreateTime(DateUtils.dateTime("yyyy-MM-dd", ERSDA)); + baseProduct.setUpdateTime(DateUtils.dateTime("yyyy-MM-dd", LAEDA)); + baseProduct.setUpdateBy(SecurityUtils.getUsername()); + sapBaseProductList.add(baseProduct); } - return R.ok(); - + return R.ok(this.importProducts(sapBaseProductList)); }catch (Exception e){ return R.fail(e.getMessage()); } } + + public String importProducts(List sapBaseProductList){ + if (StringUtils.isNull(sapBaseProductList) || sapBaseProductList.size() == 0) + { + throw new ServiceException("同步物料数据为空!"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + + for (SapBaseProduct sapBaseProduct : sapBaseProductList){ + try { + // 验证是否存在这个物料 + SapBaseProduct u=sapBaseProductMapper.selectBaseProductByProductCode(sapBaseProduct); + if (StringUtils.isNull(u)) + { + BeanValidators.validateWithException(validator, sapBaseProduct); + sapBaseProduct.setCreateBy(SecurityUtils.getUsername()); + sapBaseProductMapper.insertBaseProduct(sapBaseProduct); + successNum++; + successMsg.append("
" + successNum + "、物料 " + sapBaseProduct.getProductCode() + " 同步成功"); + } + else if (!StringUtils.isNull(u)){ + sapBaseProduct.setProductId(u.getProductId()); + sapBaseProductMapper.updateBaseProduct(sapBaseProduct); + successNum++; + successMsg.append("
" + successNum + "、物料 " + sapBaseProduct.getProductCode() + " 更新成功"); + } + + }catch (Exception e){ + failureNum++; + String msg = "
" + failureNum + "、物料 " +sapBaseProduct.getProductCode() + " 同步失败:"; + failureMsg.append(msg + e.getMessage()); + log.error(msg, e); + } + } + if (failureNum > 0) + { + failureMsg.insert(0, "很抱歉,同步失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + } + else + { + successMsg.insert(0, "恭喜您,数据已全部同步成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } } diff --git a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapMaterialPreparationServiceImpl.java b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapMaterialPreparationServiceImpl.java index 24d52961..b0b1d752 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapMaterialPreparationServiceImpl.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapMaterialPreparationServiceImpl.java @@ -1,6 +1,9 @@ package com.op.sap.service.impl; import com.op.common.core.domain.R; +import com.op.common.core.web.domain.AjaxResult; + +import com.op.sap.mapper.SapMaterialPreparationMapper; import com.op.sap.service.SapMaterialPreparationService; import com.op.sap.util.SAPConnUtils; import com.op.system.api.domain.sap.SapMaterialPreparation; @@ -14,6 +17,9 @@ import java.util.List; @Service public class SapMaterialPreparationServiceImpl implements SapMaterialPreparationService { + @Autowired + SapMaterialPreparationMapper sapMaterialPreparationMapper; + @Override public R> MaterialPreparation(String shopOrder) { // 连接 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 ec9764c9..37f1dd41 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 @@ -96,7 +96,7 @@ public class SapOrderServiceImpl implements SapOrderService { return R.ok(proOrderList); } catch (Exception e) { - return null; + return R.fail(e.getMessage()); } } diff --git a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapRouterServiceImpl.java b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapRouterServiceImpl.java index 00c2707d..56d684e5 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapRouterServiceImpl.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapRouterServiceImpl.java @@ -5,9 +5,12 @@ import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.op.common.core.domain.R; import com.op.common.core.exception.ServiceException; import com.op.common.core.utils.DateUtils; +import com.op.common.core.utils.StringUtils; +import com.op.common.core.utils.bean.BeanValidators; import com.op.common.core.utils.uuid.IdUtils; import com.op.common.core.utils.uuid.UUID; import com.op.common.core.web.domain.AjaxResult; +import com.op.sap.domain.vo.SapRouterQuery; import com.op.sap.mapper.*; import com.op.sap.service.SapRouterService; import com.op.sap.util.SAPConnUtils; @@ -17,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.server.ServerErrorException; +import javax.validation.Validator; import java.rmi.ServerException; import java.util.ArrayList; import java.util.Comparator; @@ -38,9 +42,15 @@ public class SapRouterServiceImpl implements SapRouterService { private SapProRouteProcessMapper sapProRouteProcessMapper; @Autowired private SapBaseProductMapper sapBaseProductMapper; + @Autowired + protected Validator validator; @Override - public R sapRouterSync() { + public R sapRouterSync(SapRouterQuery sapRouterQuery) { + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); try { // 获取调用 RFC 函数对象 //获取连接 @@ -51,18 +61,53 @@ public class SapRouterServiceImpl implements SapRouterService { throw new RuntimeException("Function does not exist in SAP"); } // 配置传入参数 - JCoTable jCoTable = func.getTableParameterList().getTable("S_WERKS"); - jCoTable.appendRow(); - jCoTable.setValue("SIGN", "I"); - jCoTable.setValue("OPTION", "EQ"); - jCoTable.setValue("LOW", "1000"); + /* + S_MATNR 物料 + S_WERKS 工厂 + S_ARBPL 工作中心 + S_ANDAT 创建日期 + S_AEDAT 更改日期 + + */ + JCoTable S_MATNR = func.getTableParameterList().getTable("S_MATNR"); + S_MATNR.appendRow(); + S_MATNR.setValue("SIGN", "I"); + S_MATNR.setValue("OPTION", "EQ"); + S_MATNR.setValue("LOW", sapRouterQuery.getMatnr()); + + JCoTable S_WERKS = func.getTableParameterList().getTable("S_WERKS"); + S_WERKS.appendRow(); + S_WERKS.setValue("SIGN", "I"); + S_WERKS.setValue("OPTION", "EQ"); + S_WERKS.setValue("LOW", sapRouterQuery.getWerks()); + + JCoTable S_ARBPL = func.getTableParameterList().getTable("S_ARBPL"); + S_ARBPL.appendRow(); + S_ARBPL.setValue("SIGN", "I"); + S_ARBPL.setValue("OPTION", "EQ"); + S_ARBPL.setValue("LOW", sapRouterQuery.getArbpl()); + + JCoTable S_ANDAT = func.getTableParameterList().getTable("S_ANDAT"); + S_ANDAT.appendRow(); + S_ANDAT.setValue("SIGN", "I"); + S_ANDAT.setValue("OPTION", "EQ"); + S_ANDAT.setValue("LOW", sapRouterQuery.getAndat()); + + JCoTable S_AEDAT = func.getTableParameterList().getTable("S_AEDAT"); + S_AEDAT.appendRow(); + S_AEDAT.setValue("SIGN", "I"); + S_AEDAT.setValue("OPTION", "EQ"); + S_AEDAT.setValue("LOW", sapRouterQuery.getAedat()); + + func.execute(dest);//执行调用函数 // 获取 内表 - ZMES_PRO JCoTable maraTable = func.getTableParameterList().getTable("LT_ROUTING"); JCoRecordMetaData metaData = maraTable.getRecordMetaData(); System.out.println("###" + metaData.toString()); - + List sapProRouteList=new ArrayList<>(); DynamicDataSourceContextHolder.push("ds_1000"); + for (int i = 0; i new TreeSet<>(Comparator.comparing(SapProProcess::getProcessName))), ArrayList::new)); + + //工艺路线下的工序 if (StringUtil.isBlank(PLNNR)) { throw new ServiceException("任务清单组码不能为空"); } - //查询有无工艺路线 - SapProRoute sapProRoute=sapProRouteMapper.selectProRouteByRouteCode(PLNNR); - //如果工艺路线存在,去查询工艺路线对应成品 - // Float revision = new Float(1.0); - if (sapProRoute==null){ - /** - * 校验 - */ - - sapProProcess.setProcessName(LTXA1); - SapProProcess operation = sapProProcessMapper.selectProProcessByProcessName(sapProProcess); - if (operation == null) { - throw new ServiceException("工艺路线【" + PLNNR + "】下的工序【" + LTXA1 + "】不存在!"); - } - SapBaseProduct sapBaseProduct=new SapBaseProduct(); - sapBaseProduct.setProductCode(MATNR); - sapBaseProduct = sapBaseProductMapper.selectBaseProductByProductCode(sapBaseProduct); - if (sapBaseProduct==null){ - throw new ServiceException("工艺路线【" + PLNNR + "】下的物料【" + MATNR + "】不存在!"); - } - - //添加工艺路线 - sapProRoute=new SapProRoute(); - String routerid = IdUtils.fastSimpleUUID(); - sapProRoute.setRouteId(routerid); - sapProRoute.setRouteCode(PLNNR); - sapProRoute.setRouteName(KTEXT); - sapProRoute.setRouteDesc(KTEXT); - sapProRoute.setEnableFlag("Y"); - sapProRoute.setCreateBy(ANNAM); - sapProRoute.setCreateTime(DateUtils.dateTime("yyyy-MM-dd", ANDAT)); - sapProRoute.setRouteVersion("1.0"); - sapProRouteMapper.insertProRoute(sapProRoute); - - //增加工艺路线和工序的关系 - SapProRouteProcess sapProRouteProcess=new SapProRouteProcess(); - sapProRouteProcess.setRecordId(IdUtils.fastSimpleUUID()); - sapProRouteProcess.setRouteId(routerid); - sapProRouteProcess.setProcessId(operation.getProcessId()); - sapProRouteProcess.setProcessCode(operation.getProcessCode()); - sapProRouteProcess.setProcessName(operation.getProcessName()); - sapProRouteProcess.setOrderNum(1); - sapProRouteProcess.setCreateTime(DateUtils.dateTime("yyyy-MM-dd", ANDAT)); - sapProRouteProcess.setCreateBy(ANNAM); - sapProRouteProcessMapper.insertProRouteProcess(sapProRouteProcess); - - //增加与产品的关系 - - SapProRouteProduct sapProRouteProduct=new SapProRouteProduct(); - sapProRouteProduct.setRecordId(IdUtils.fastSimpleUUID()); - sapProRouteProduct.setRouteId(routerid); - sapProRouteProduct.setItemId(sapBaseProduct.getProductId()); - sapProRouteProduct.setItemCode(MATNR); - sapProRouteProduct.setItemName(sapBaseProduct.getProductDescZh()); - sapProRouteProduct.setCreateBy(ANNAM); - sapProRouteProduct.setCreateTime(DateUtils.dateTime("yyyy-MM-dd", ANDAT)); - sapProRouteProductMapper.insertProRouteProduct(sapProRouteProduct); - - } - else { - //工艺路线存在 - SapProRouteProduct sapProRouteProduct=new SapProRouteProduct(); - sapProRouteProduct.setRouteId(sapProRoute.getRouteId()); - sapProRouteProduct.setItemCode(MATNR); - List sapProRouteProductList=sapProRouteProductMapper.selectProRouteProductList(sapProRouteProduct); - if (sapProRouteProductList==null){ + // 验证是否存在这个工艺路线 + SapProRoute sapProRoute=sapProRouteMapper.selectProRouteByRouteCode(PLNNR); + // 如果工艺路线不存在,直接插入 + if (StringUtils.isNull(sapProRoute)){ + //验证是否存在工序 + sapProProcess.setProcessName(LTXA1); + SapProProcess operation = sapProProcessMapper.selectProProcessByProcessName(sapProProcess); + //验证原材料是否存在 SapBaseProduct sapBaseProduct=new SapBaseProduct(); sapBaseProduct.setProductCode(MATNR); sapBaseProduct = sapBaseProductMapper.selectBaseProductByProductCode(sapBaseProduct); - if (sapBaseProduct==null){ - throw new ServiceException("工艺路线【" + PLNNR + "】下的物料【" + MATNR + "】不存在!"); + if (StringUtils.isNull(operation)){ + failureNum++; + failureMsg.append(failureNum+"、工艺路线【" + PLNNR + "】下的工序【" + LTXA1 + "】不存在!"); + } + + else if (StringUtils.isNull(sapBaseProduct)){ + failureNum++; + failureMsg.append(failureNum+"、工艺路线【" + PLNNR + "】下的物料【" + MATNR + "】不存在!"); + } + else if (!StringUtils.isNull(operation) && !StringUtils.isNull(sapBaseProduct)){ + // BeanValidators.validateWithException(validator, sapProRoute); + //添加工艺路线 + sapProRoute=new SapProRoute(); + String routerid = IdUtils.fastSimpleUUID(); + sapProRoute.setRouteId(routerid); + sapProRoute.setRouteCode(PLNNR); + sapProRoute.setRouteName(KTEXT); + sapProRoute.setRouteDesc(KTEXT); + sapProRoute.setEnableFlag("Y"); + sapProRoute.setCreateBy(ANNAM); + sapProRoute.setCreateTime(DateUtils.dateTime("yyyy-MM-dd", ANDAT)); + sapProRoute.setRouteVersion("1.0"); + sapProRouteMapper.insertProRoute(sapProRoute); + + //增加工艺路线和工序的关系 + SapProRouteProcess sapProRouteProcess=new SapProRouteProcess(); + sapProRouteProcess.setRecordId(IdUtils.fastSimpleUUID()); + sapProRouteProcess.setRouteId(routerid); + sapProRouteProcess.setProcessId(operation.getProcessId()); + sapProRouteProcess.setProcessCode(operation.getProcessCode()); + sapProRouteProcess.setProcessName(operation.getProcessName()); + sapProRouteProcess.setOrderNum(1); + sapProRouteProcess.setCreateTime(DateUtils.dateTime("yyyy-MM-dd", ANDAT)); + sapProRouteProcess.setCreateBy(ANNAM); + sapProRouteProcessMapper.insertProRouteProcess(sapProRouteProcess); + //增加与产品的关系 + SapProRouteProduct sapProRouteProduct=new SapProRouteProduct(); + sapProRouteProduct.setRecordId(IdUtils.fastSimpleUUID()); + sapProRouteProduct.setRouteId(routerid); + sapProRouteProduct.setItemId(sapBaseProduct.getProductId()); + sapProRouteProduct.setItemCode(MATNR); + sapProRouteProduct.setItemName(sapBaseProduct.getProductDescZh()); + sapProRouteProduct.setCreateBy(ANNAM); + sapProRouteProduct.setCreateTime(DateUtils.dateTime("yyyy-MM-dd", ANDAT)); + sapProRouteProductMapper.insertProRouteProduct(sapProRouteProduct); + successNum++; } + } + else{ + //验证是否存在工序 sapProProcess.setProcessName(LTXA1); SapProProcess operation = sapProProcessMapper.selectProProcessByProcessName(sapProProcess); - if (operation == null) { - throw new ServiceException("工艺路线【" + PLNNR + "】下的工序【" + LTXA1 + "】不存在!"); + //验证原材料是否存在 + SapBaseProduct sapBaseProduct=new SapBaseProduct(); + sapBaseProduct.setProductCode(MATNR); + sapBaseProduct = sapBaseProductMapper.selectBaseProductByProductCode(sapBaseProduct); + if (StringUtils.isNull(operation)){ + failureNum++; + failureMsg.append(failureNum+"、工艺路线【" + PLNNR + "】下的工序【" + LTXA1 + "】不存在!"); + } + else if (StringUtils.isNull(sapBaseProduct)){ + failureNum++; + failureMsg.append(failureNum+"、工艺路线【" + PLNNR + "】下的物料【" + MATNR + "】不存在!"); + } + else if(!StringUtils.isNull(operation) && !StringUtils.isNull(sapBaseProduct)) { + //验证是否存在工艺路线和工序的关系 + SapProRouteProcess sapProRouteProcess = new SapProRouteProcess(); + sapProRouteProcess.setRouteId(sapProRoute.getRouteId()); + sapProRouteProcess.setProcessId(operation.getProcessId()); + List sapProRouteProcessList = sapProRouteProcessMapper.selectProRouteProcessList(sapProRouteProcess); + if (sapProRouteProcessList .size()==0) { + //增加工艺路线和工序的关系 + sapProRouteProcess.setRecordId(IdUtils.fastSimpleUUID()); + sapProRouteProcess.setRouteId(sapProRoute.getRouteId()); + sapProRouteProcess.setProcessId(operation.getProcessId()); + sapProRouteProcess.setProcessCode(operation.getProcessCode()); + sapProRouteProcess.setProcessName(operation.getProcessName()); + sapProRouteProcess.setOrderNum(1); + sapProRouteProcess.setCreateTime(DateUtils.dateTime("yyyy-MM-dd", ANDAT)); + sapProRouteProcess.setCreateBy(ANNAM); + sapProRouteProcessMapper.insertProRouteProcess(sapProRouteProcess); + } + //验证是否存在工艺路线和物料的关系 + SapProRouteProduct sapProRouteProduct = new SapProRouteProduct(); + sapProRouteProduct.setRouteId(sapProRoute.getRouteId()); + sapProRouteProduct.setItemCode(MATNR); + List sapProRouteProductList = sapProRouteProductMapper.selectProRouteProductList(sapProRouteProduct); + if (sapProRouteProductList .size()==0) { + sapProRouteProduct.setRecordId(IdUtils.fastSimpleUUID()); + sapProRouteProduct.setRouteId(sapProRoute.getRouteId()); + sapProRouteProduct.setItemId(sapBaseProduct.getProductId()); + sapProRouteProduct.setItemCode(MATNR); + sapProRouteProduct.setItemName(sapBaseProduct.getProductDescZh()); + sapProRouteProduct.setCreateBy(ANNAM); + sapProRouteProduct.setCreateTime(DateUtils.dateTime("yyyy-MM-dd", ANDAT)); + sapProRouteProductMapper.insertProRouteProduct(sapProRouteProduct); + } } - sapProRouteProduct.setRecordId(IdUtils.fastSimpleUUID()); - sapProRouteProduct.setRouteId(sapProRoute.getRouteId()); - sapProRouteProduct.setItemId(sapBaseProduct.getProductId()); - sapProRouteProduct.setItemCode(MATNR); - sapProRouteProduct.setItemName(sapBaseProduct.getProductDescZh()); - sapProRouteProduct.setCreateBy(ANNAM); - sapProRouteProduct.setCreateTime(DateUtils.dateTime("yyyy-MM-dd", ANDAT)); - - //增加工艺路线和工序的关系 - SapProRouteProcess sapProRouteProcess=new SapProRouteProcess(); - sapProRouteProcess.setRecordId(IdUtils.fastSimpleUUID()); - sapProRouteProcess.setRouteId(sapProRoute.getRouteId()); - sapProRouteProcess.setProcessId(operation.getProcessId()); - sapProRouteProcess.setProcessCode(operation.getProcessCode()); - sapProRouteProcess.setProcessName(operation.getProcessName()); - sapProRouteProcess.setOrderNum(1); - sapProRouteProcess.setCreateTime(DateUtils.dateTime("yyyy-MM-dd", ANDAT)); - sapProRouteProcess.setCreateBy(ANNAM); - sapProRouteProductMapper.insertProRouteProduct(sapProRouteProduct); - sapProRouteProcessMapper.insertProRouteProcess(sapProRouteProcess); } - } + + } + if (failureNum > 0) + { + failureMsg.insert(0, "很抱歉,同步失败!共 " + failureNum + " 工艺路线异常,错误如下:"); + throw new ServiceException(failureMsg.toString()); + } + else + { + successMsg.insert(0, "恭喜您,数据同步成功!共 " + successNum + " 条,数据如下:"); + } }catch (Exception e){ return R.fail(e.getMessage()); } - return null; + return R.ok(successMsg); } - - - } + diff --git a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapWorkCenterServiceImpl.java b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapWorkCenterServiceImpl.java index f47253d6..0b8a7040 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapWorkCenterServiceImpl.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/service/impl/SapWorkCenterServiceImpl.java @@ -2,8 +2,11 @@ package com.op.sap.service.impl; import com.op.common.core.domain.R; import com.op.common.core.utils.DateUtils; +import com.op.common.core.utils.StringUtils; import com.op.sap.service.SapWorkCenterService; import com.op.sap.util.SAPConnUtils; +import com.op.system.api.domain.sap.SapCustom; +import com.op.system.api.domain.sap.SapSupplier; import com.op.system.api.domain.sap.SapWorkCenter; import com.sap.conn.jco.*; import org.springframework.stereotype.Service; @@ -66,7 +69,7 @@ public class SapWorkCenterServiceImpl implements SapWorkCenterService { } @Override - public R sapSupplierSync() { + public R sapSupplierSync(SapSupplier sapSupplier) { try { // 获取调用 RFC 函数对象 //获取连接 @@ -76,47 +79,77 @@ public class SapWorkCenterServiceImpl implements SapWorkCenterService { if (func == null) { throw new RuntimeException("Function does not exist in SAP"); } - // 配置传入参数 - JCoTable jCoTable = func.getTableParameterList().getTable("S_BUKRS"); - jCoTable.appendRow(); - jCoTable.setValue("SIGN", "I"); - jCoTable.setValue("OPTION", "EQ"); - jCoTable.setValue("LOW", "1000"); + + /* 输入表 + S_BUKRS 工厂 1000/1001/1002 + S_LIFNR 供应商 + S_ERDAT 记录创建日期 + */ + if (!StringUtils.isNull(sapSupplier.getBukrs())){ + JCoTable S_BUKRS = func.getTableParameterList().getTable("S_BUKRS"); + S_BUKRS.appendRow(); + S_BUKRS.setValue("SIGN", "I"); + S_BUKRS.setValue("OPTION", "EQ"); + S_BUKRS.setValue("LOW", sapSupplier.getBukrs()); + } + + if (!StringUtils.isNull(sapSupplier.getLifnr())){ + JCoTable S_LIFNR = func.getTableParameterList().getTable("S_LIFNR"); + S_LIFNR.appendRow(); + S_LIFNR.setValue("SIGN", "I"); + S_LIFNR.setValue("OPTION", "EQ"); + S_LIFNR.setValue("LOW", sapSupplier.getLifnr()); + } + + ///日期参数示例 + + if (!StringUtils.isNull(sapSupplier.getErdat())){ + JCoTable S_ERDAT = func.getTableParameterList().getTable("S_ERDAT"); + S_ERDAT.appendRow(); + S_ERDAT.setValue("SIGN", "I"); + S_ERDAT.setValue("OPTION", "EQ"); + S_ERDAT.setValue("LOW", sapSupplier.getErdat() ); + } + + func.execute(dest);//执行调用函数 // 获取 内表 - ZMES_PRO JCoTable maraTable = func.getTableParameterList().getTable("LT_LIFNR"); JCoRecordMetaData metaData = maraTable.getRecordMetaData(); System.out.println("###" + metaData.toString()); - List sapWorkCenterList=new ArrayList<>(); + List sapSupplierList=new ArrayList<>(); for (int i = 0; i sapWorkCenterList=new ArrayList<>(); + List sapCustomList=new ArrayList<>(); for (int i = 0; i and process_code = #{processCode} - and process_name = #{processName} + and process_name = #{processName} and attention = #{attention} and enable_flag = #{enableFlag} diff --git a/op-modules/op-sap/src/main/resources/mapper/sap/SapProRouteMapper.xml b/op-modules/op-sap/src/main/resources/mapper/sap/SapProRouteMapper.xml index acdc654b..df6cebe2 100644 --- a/op-modules/op-sap/src/main/resources/mapper/sap/SapProRouteMapper.xml +++ b/op-modules/op-sap/src/main/resources/mapper/sap/SapProRouteMapper.xml @@ -46,11 +46,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where route_id = #{routeId} - + select top 1 route_id, route_code, route_name, route_desc, enable_flag, remark, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time, route_version,need_check - from pro_route + from pro_route where route_code = #{routeCode} order by route_version desc diff --git a/op-modules/op-technology/src/main/java/com/op/technology/domain/ProRoute.java b/op-modules/op-technology/src/main/java/com/op/technology/domain/ProRoute.java index ca0c0137..62374bd7 100644 --- a/op-modules/op-technology/src/main/java/com/op/technology/domain/ProRoute.java +++ b/op-modules/op-technology/src/main/java/com/op/technology/domain/ProRoute.java @@ -74,6 +74,16 @@ public class ProRoute extends BaseEntity private String routeVersion; + private String productCode; + + public String getProductCode() { + return productCode; + } + + public void setProductCode(String productCode) { + this.productCode = productCode; + } + public Integer getCarNumUnit() { return carNumUnit; } diff --git a/op-modules/op-technology/src/main/resources/mapper/technology/ProRouteMapper.xml b/op-modules/op-technology/src/main/resources/mapper/technology/ProRouteMapper.xml index 40fe8502..ca9ac622 100644 --- a/op-modules/op-technology/src/main/resources/mapper/technology/ProRouteMapper.xml +++ b/op-modules/op-technology/src/main/resources/mapper/technology/ProRouteMapper.xml @@ -27,13 +27,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + select route_id, route_code, route_name, route_desc, enable_flag, remark, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time, - route_version,need_check,tec_man,tec_machine,tec_other,tec_depreciation,car_num_unit + route_version,need_check,tec_man,tec_machine,tec_other,tec_depreciation,car_num_unit, + product_code from pro_route @@ -41,6 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and route_code = #{routeCode} + and product_code like concat('%', #{productCode}, '%') and route_name like concat('%', #{routeName}, '%') and route_desc = #{routeDesc} and enable_flag = #{enableFlag} diff --git a/op-modules/op-technology/src/main/resources/mapper/technology/ProRouteProductMapper.xml b/op-modules/op-technology/src/main/resources/mapper/technology/ProRouteProductMapper.xml index 3d73959c..dcc8b5bf 100644 --- a/op-modules/op-technology/src/main/resources/mapper/technology/ProRouteProductMapper.xml +++ b/op-modules/op-technology/src/main/resources/mapper/technology/ProRouteProductMapper.xml @@ -53,8 +53,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select pp.item_code itemCode, - bp.product_desc_zh label + concat(bp.product_desc_zh,'(',bp.product_code,')') label from pro_route_product pp left join base_product bp on pp.item_code = bp.product_code where pp.route_id = #{routeId}