sap+计划的bug修改

highway
zhaoxiaolin 1 year ago
parent 6b7447c037
commit 09e0b3e249

@ -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;
}
}

@ -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 + '\'' +
'}';
}
}

@ -64,8 +64,7 @@ public class RyTask {
remoteSapService.sapRouterSync();
}
/**2100
* 0 00 21 * * ?
/**2
*/
public void getTOrderTask(){
logger.info("++同步今日订单+开始++getTOrderTask+++++");

@ -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<ProOrder> util = new ExcelUtil<>(ProOrder.class);
// 接收表格信息
List<ProOrder> 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<ProOrder> util = new ExcelUtil<>(ProOrder.class);
List<ProOrder> 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, "订单基本信息");
}
}

@ -21,10 +21,11 @@ public class ProOrder extends TreeEntity {
private String id;
/** 计划工厂编码 */
@Excel(name = "计划工厂编码")
private String planFactoryCode;
/** 工厂编码 */
@Excel(name = "计划工厂编码")
private String factoryCode;
/** 订单类型 */

@ -408,7 +408,6 @@ public class ProOrderServiceImpl implements IProOrderService {
return success();
}
@Transactional(rollbackFor = Exception.class)
public String syncSAPFunc(List<SapProOrder> 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<ProOrder> 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<ProOrder> orderCodes = this.getListByPCode(proOrder);
List<ProOrder> orderCodes = this.getListBySonCode(proOrder);
if (!CollectionUtils.isEmpty(orderCodes)) {
List<String> 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<ProOrder> getListBySonCode(ProOrder pOrder) {
List<ProOrder> codeList = new ArrayList<>();
codeList.add(pOrder);
List<ProOrder> 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_",""));

@ -143,7 +143,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectProOrderByOrderCode" parameterType="String" resultMap="ProOrderResult">
<include refid="selectProOrderVo"/>
where order_code = #{orderCode} and del_flag = '0'
where order_code like concat('%', #{orderCode}, '%') and del_flag = '0'
</select>
<select id="selectChildProOrderCodeByCode" resultType="java.lang.String">
@ -251,7 +251,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="prodType != null">#{prodType},</if>
<if test="prodSpc != null">#{prodSpc},</if>
<if test="carNum != null">#{carNum},</if>
sync_time = GETDATE(),
GETDATE(),
</trim>
</insert>

@ -140,10 +140,12 @@
<delete id="deleteProOrderWorkorderBatchByWorkorderIds" parameterType="String">
update pro_order_workorder_batch
set del_flag = '1'
where workorder_id in
where workorder_id in(
select workorder_id from pro_order_workorder where order_id in
<foreach item="workorderId" collection="array" open="(" separator="," close=")">
#{workorderId}
</foreach>
)
</delete>
</mapper>

@ -84,7 +84,7 @@
<select id="selectProOrderWorkorderByWorkorderId" parameterType="String" resultMap="ProOrderWorkorderResult">
<include refid="selectProOrderWorkorderVo"/>
where workorder_code = #{workorderId} or workorder_id = #{workorderId}
where (workorder_code = #{workorderId} or workorder_id = #{workorderId})
and del_flag = '0'
</select>
@ -422,7 +422,7 @@
<delete id="deleteProOrderWorkorderByWorkorderIds" parameterType="String">
update pro_order_workorder
set del_flag = '1'
where workorder_id in
where order_id in
<foreach item="workorderId" collection="array" open="(" separator="," close=")">
#{workorderId}
</foreach>

@ -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);
}
}

@ -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;
}
}

@ -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;
}
}

@ -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;
}
}

@ -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);
}

@ -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);
}

@ -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);
}

@ -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);
}

@ -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<SapBom> sapBomList=new ArrayList<>();
List<SapBomComponent> 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);

@ -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<SapBaseProduct> 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<SapBaseProduct> 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("<br/>" + successNum + "、物料 " + sapBaseProduct.getProductCode() + " 同步成功");
}
else if (!StringUtils.isNull(u)){
sapBaseProduct.setProductId(u.getProductId());
sapBaseProductMapper.updateBaseProduct(sapBaseProduct);
successNum++;
successMsg.append("<br/>" + successNum + "、物料 " + sapBaseProduct.getProductCode() + " 更新成功");
}
}catch (Exception e){
failureNum++;
String msg = "<br/>" + 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();
}
}

@ -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<List<SapMaterialPreparation>> MaterialPreparation(String shopOrder) {
// 连接

@ -96,7 +96,7 @@ public class SapOrderServiceImpl implements SapOrderService {
return R.ok(proOrderList);
} catch (Exception e) {
return null;
return R.fail(e.getMessage());
}
}

@ -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<SapProRoute> sapProRouteList=new ArrayList<>();
DynamicDataSourceContextHolder.push("ds_1000");
for (int i = 0; i <maraTable.getNumRows(); i++) {
SapProProcess sapProProcess=new SapProProcess();
maraTable.setRow(i);
@ -118,9 +163,12 @@ public class SapRouterServiceImpl implements SapRouterService {
"删除标识:" + LOEKZ+
"物料号:" + MATNR+
"物料描述:" + MAKTX+
"任务清单使用"+VERWE+
"状态"+STATU+
"任务清单描述:" + KTEXT+
" 操作/活动编号:" + VORNR+
" 操作/活动编号:" + VORNR+
"控制码:" + STEUS+
"标准文本码"+KTSCH+
"工序短文本:" + LTXA1+
"创建日期:" + ANDAT+
"创建者:" + ANNAM+
@ -137,122 +185,140 @@ public class SapRouterServiceImpl implements SapRouterService {
"计量单位03" + VGE03+
" 标准值04" + VGE04+
" 计量单位04" + VGE04);
// sapProProcess.setProcessName(LTXA1);
// sapProProcess.setWorkCenter(ARBPL);
// sapProProcessList.add(sapProProcess);
// sapProProcessList = sapProProcessList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> 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<SapProRouteProduct> 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<SapProRouteProcess> 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<SapProRouteProduct> 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);
}
}

@ -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<SapWorkCenter> sapWorkCenterList=new ArrayList<>();
List<SapSupplier> sapSupplierList=new ArrayList<>();
for (int i = 0; i <maraTable.getNumRows(); i++) {
maraTable.setRow(i);
SapWorkCenter sapWorkCenter=new SapWorkCenter();
SapSupplier sapSuppliers=new SapSupplier();
String BUKRS = maraTable.getString("BUKRS");
String LIFNR = maraTable.getString("LIFNR");
String NAME1 = maraTable.getString("NAME1");
String TELF1 = maraTable.getString("TELF1");
String STRAS = maraTable.getString("STRAS");
String ERDAT = maraTable.getString("ERDAT");
System.out.println(
"公司代码:" + BUKRS+
"供应商:" + LIFNR+
"供应商名称:" + NAME1+
"第一个电话号 " + TELF1+
"住宅号及街道:" + STRAS);
// sapWorkCenter.setWeeks(WERKS);
// sapWorkCenter.setName1(NAME1);
// sapWorkCenter.setArbpl(ARBPL);
// sapWorkCenter.setKtext(KTEXT);
// sapWorkCenter.setAedat_grnd(DateUtils.dateTime("yyyy-MM-dd", AEDAT_GRND));
// sapWorkCenterList.add(sapWorkCenter);
"住宅号及街道:" + STRAS+
"创建时间"+ERDAT);
sapSuppliers.setBukrs(BUKRS);
sapSuppliers.setLifnr(LIFNR);
sapSuppliers.setName1(NAME1);
sapSuppliers.setTelf1(TELF1);
sapSuppliers.setStras(STRAS);
sapSuppliers.setErdat(ERDAT);
sapSupplierList.add(sapSuppliers);
}
return R.ok(sapWorkCenterList);
return R.ok(sapSupplierList);
}catch (Exception e){
return R.fail(e.getMessage());
}
}
@Override
public R sapCustomSync() {
public R sapCustomSync(SapCustom sapCustom) {
try {
// 获取调用 RFC 函数对象
//获取连接
@ -126,21 +159,44 @@ 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_KUNNR
S_ERDAT
*/
if (!StringUtils.isNull(sapCustom.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", sapCustom.getBukrs());
}
if (!StringUtils.isNull(sapCustom.getKunnr())){
JCoTable S_KUNNR = func.getTableParameterList().getTable("S_KUNNR");
S_KUNNR.appendRow();
S_KUNNR.setValue("SIGN", "I");
S_KUNNR.setValue("OPTION", "EQ");
S_KUNNR.setValue("LOW", sapCustom.getKunnr());
}
///日期参数示例 20230921
if (!StringUtils.isNull(sapCustom.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", sapCustom.getErdat() );
}
func.execute(dest);//执行调用函数
// 获取 内表 - ZMES_PRO
JCoTable maraTable = func.getTableParameterList().getTable("LT_KUNNR");
JCoRecordMetaData metaData = maraTable.getRecordMetaData();
System.out.println("###" + metaData.toString());
List<SapWorkCenter> sapWorkCenterList=new ArrayList<>();
List<SapCustom> sapCustomList=new ArrayList<>();
for (int i = 0; i <maraTable.getNumRows(); i++) {
maraTable.setRow(i);
SapWorkCenter sapWorkCenter=new SapWorkCenter();
SapCustom sapCustoms=new SapCustom();
String BUKRS = maraTable.getString("BUKRS");
String KUNNR = maraTable.getString("KUNNR");
String NAME1 = maraTable.getString("NAME1");
@ -154,14 +210,14 @@ public class SapWorkCenterServiceImpl implements SapWorkCenterService {
"第一个电话号 " + TELF1+
"住宅号及街道:" + STRAS+
"记录创建日期"+ERDAT);
// sapWorkCenter.setWeeks(WERKS);
// sapWorkCenter.setName1(NAME1);
// sapWorkCenter.setArbpl(ARBPL);
// sapWorkCenter.setKtext(KTEXT);
// sapWorkCenter.setAedat_grnd(DateUtils.dateTime("yyyy-MM-dd", AEDAT_GRND));
// sapWorkCenterList.add(sapWorkCenter);
sapCustoms.setBukrs(BUKRS);
sapCustoms.setKunnr(KUNNR);
sapCustoms.setName1(NAME1);
sapCustoms.setStras(STRAS);
sapCustoms.setErdat(ERDAT);
sapCustomList.add(sapCustoms);
}
return R.ok(sapWorkCenterList);
return R.ok(sapCustomList);
}catch (Exception e){
return R.fail(e.getMessage());
}

@ -89,6 +89,7 @@ public class SAPConnUtils {
// System.out.println(destination.getAttributes());
} catch (JCoException e) {
// TODO: handle exception
throw new RuntimeException("连接SAP失败错误: " + e.toString());
// System.out.println("连接SAP失败错误: " + e.toString());
}
return destination;

@ -68,7 +68,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectProProcessVo"/>
<where>
<if test="processCode != null and processCode != ''"> and process_code = #{processCode}</if>
<if test="processName != null and processName != ''"> and process_name = #{processName}</if>
<if test="processName != null "> and process_name = #{processName}</if>
<if test="attention != null and attention != ''"> and attention = #{attention}</if>
<if test="enableFlag != null and enableFlag != ''"> and enable_flag = #{enableFlag}</if>
</where>

@ -46,11 +46,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectProRouteVo"/>
where route_id = #{routeId}
</select>
<select id="selectProRouteByRouteCode" parameterType="com.op.system.api.domain.sap.SapProRoute" resultMap="ProRouteResult">
select top 1 route_id, route_code, route_name, route_desc, enable_flag, remark,
<select id="selectProRouteByRouteCode" parameterType="String" resultMap="ProRouteResult">
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
</select>

@ -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;
}

@ -27,13 +27,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="tecOther" column="tec_other" />
<result property="tecDepreciation" column="tec_depreciation" />
<result property="carNumUnit" column="car_num_unit" />
<result property="productCode" column="product_code" />
</resultMap>
<sql id="selectProRouteVo">
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
</sql>
@ -41,6 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectProRouteVo"/>
<where>
<if test="routeCode != null and routeCode != ''"> and route_code = #{routeCode}</if>
<if test="productCode != null and productCode != ''"> and product_code like concat('%', #{productCode}, '%')</if>
<if test="routeName != null and routeName != ''"> and route_name like concat('%', #{routeName}, '%')</if>
<if test="routeDesc != null and routeDesc != ''"> and route_desc = #{routeDesc}</if>
<if test="enableFlag != null and enableFlag != ''"> and enable_flag = #{enableFlag}</if>

@ -53,8 +53,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<!-- 现在逻辑:关联产品-->
<select id="getRouteProdProductListUndo" resultType="com.op.technology.domain.ProRouteProduct">
select bp.product_code itemCode,
bp.product_desc_zh label,
bp.product_desc_zh itemName,
concat(bp.product_desc_zh,'(',bp.product_code,')') label,
concat(bp.product_desc_zh,'(',bp.product_code,')') itemName,
bp.product_id itemId
from base_product bp
where bp.active_flag = '1' and bp.del_flag = '0'
@ -77,7 +77,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getRouteProdProductListDo" resultType="com.op.technology.domain.ProRouteProduct">
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}

Loading…
Cancel
Save