订单同步按钮

highway
zhaoxiaolin 2 years ago
parent d0dd51a777
commit da486d7e20

@ -8,6 +8,7 @@ import com.op.system.api.model.SapProOrder;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@ -27,4 +28,7 @@ public interface RemotePlanService {
*/
@PostMapping("/order/shopOrderSync")
public R<Boolean> shopOrderSync(List<SapProOrder> proOrderList);
@PostMapping("/order/syncSAPOrders")
public R syncSAPOrders();
}

@ -4,6 +4,7 @@ import com.op.common.core.constant.ServiceNameConstants;
import com.op.common.core.domain.R;
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.factory.RemoteSapFallbackFactory;
import com.op.system.api.model.SapProOrder;
import org.springframework.cloud.openfeign.FeignClient;
@ -34,5 +35,13 @@ public interface RemoteSapService {
/**回传sap母工单**/
@PostMapping("/sap/SapCreateOrder")
public R SapCreateOrder(@RequestBody List<SapCreateOrder> sapCreateOrderList);
public R<List<String>> SapCreateOrder(@RequestBody List<SapCreateOrder> sapCreateOrderList);
/**关闭订单**/
@PostMapping("/sap/sapCloseOrder")
public R sapCloseOrder(@RequestParam("shopOrder") String shopOrder);
/**报工**/
@PostMapping("/sap/sapRFWOrder")
public R sapRFWOrder(@RequestBody SapRFW sapRFW);
}

@ -0,0 +1,145 @@
package com.op.system.api.domain.sap;
/**
*
*/
public class SapRFW {
private String aufnr;
private String gamng;
private lt_gs lt_gs;
private lt_hw lt_hw;
public SapRFW.lt_hw getLt_hw() {
return lt_hw;
}
public void setLt_hw(SapRFW.lt_hw lt_hw) {
this.lt_hw = lt_hw;
}
public SapRFW.lt_gs getLt_gs() {
return lt_gs;
}
public void setLt_gs(SapRFW.lt_gs lt_gs) {
this.lt_gs = lt_gs;
}
public String getAufnr() {
return aufnr;
}
public void setAufnr(String aufnr) {
this.aufnr = aufnr;
}
public String getGamng() {
return gamng;
}
public void setGamng(String gamng) {
this.gamng = gamng;
}
public class lt_gs
{
String conf_activity1;
String conf_activity2;
String conf_activity3;
String conf_activity4;
String conf_activity5;
String conf_activity6;
public String getConf_activity1() {
return conf_activity1;
}
public void setConf_activity1(String conf_activity1) {
this.conf_activity1 = conf_activity1;
}
public String getConf_activity2() {
return conf_activity2;
}
public void setConf_activity2(String conf_activity2) {
this.conf_activity2 = conf_activity2;
}
public String getConf_activity3() {
return conf_activity3;
}
public void setConf_activity3(String conf_activity3) {
this.conf_activity3 = conf_activity3;
}
public String getConf_activity4() {
return conf_activity4;
}
public void setConf_activity4(String conf_activity4) {
this.conf_activity4 = conf_activity4;
}
public String getConf_activity5() {
return conf_activity5;
}
public void setConf_activity5(String conf_activity5) {
this.conf_activity5 = conf_activity5;
}
public String getConf_activity6() {
return conf_activity6;
}
public void setConf_activity6(String conf_activity6) {
this.conf_activity6 = conf_activity6;
}
@Override
public String toString() {
return "lt_gs{" +
"conf_activity1='" + conf_activity1 + '\'' +
", conf_activity2='" + conf_activity2 + '\'' +
", conf_activity3='" + conf_activity3 + '\'' +
", conf_activity4='" + conf_activity4 + '\'' +
", conf_activity5='" + conf_activity5 + '\'' +
", conf_activity6='" + conf_activity6 + '\'' +
'}';
}
}
public class lt_hw{
String material;
String entry_qnt;
public String getMaterial() {
return material;
}
public void setMaterial(String material) {
this.material = material;
}
public String getEntry_qnt() {
return entry_qnt;
}
public void setEntry_qnt(String entry_qnt) {
this.entry_qnt = entry_qnt;
}
@Override
public String toString() {
return "lt_hw{" +
"material='" + material + '\'' +
", entry_qnt='" + entry_qnt + '\'' +
'}';
}
}
}

@ -28,6 +28,11 @@ public class RemotePlanFallbackFactory implements FallbackFactory<RemotePlanServ
public R<Boolean> shopOrderSync(List<SapProOrder> proOrderList) {
return R.fail("PLAN服务新增SAP订单失败:" + throwable.getMessage());
}
@Override
public R syncSAPOrders() {
return R.fail("定时任务更新订单失败:" + throwable.getMessage());
}
};
}
}

@ -4,6 +4,7 @@ import com.op.common.core.domain.R;
import com.op.system.api.RemoteSapService;
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.model.SapProOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -39,9 +40,19 @@ public class RemoteSapFallbackFactory implements FallbackFactory<RemoteSapServic
}
@Override
public R SapCreateOrder(List<SapCreateOrder> sapCreateOrderList) {
public R<List<String>> SapCreateOrder(List<SapCreateOrder> sapCreateOrderList) {
return R.fail("回传sap工单失败:" + throwable.getMessage());
}
@Override
public R sapCloseOrder(String shopOrder) {
return R.fail("关闭订单失败:" + throwable.getMessage());
}
@Override
public R sapRFWOrder(SapRFW sapRFW) {
return R.fail("sap报工失败" + throwable.getMessage());
}
};
}
}

@ -4,6 +4,7 @@ import com.op.common.core.domain.R;
import com.op.common.core.utils.DateUtils;
import com.op.common.core.web.domain.AjaxResult;
import com.op.system.api.RemoteMesService;
import com.op.system.api.RemotePlanService;
import com.op.system.api.RemoteSapService;
import com.op.system.api.model.SapProOrder;
import org.springframework.beans.factory.annotation.Autowired;
@ -24,6 +25,9 @@ public class RyTask {
@Autowired
private RemoteSapService remoteSapService;
@Autowired
private RemotePlanService remotePlanService;
public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) {
System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i));
}
@ -58,4 +62,11 @@ public class RyTask {
remoteSapService.sapProRouteProcess();
}
/**3023
* 0 30 23 * * ?
*/
public void getTOrderTask(){
System.out.println("++同步今日订单+开始++getTOrderTask+++++");
remotePlanService.syncSAPOrders();
}
}

@ -151,7 +151,7 @@ public class MesPrepareServiceImpl implements IMesPrepareService {
}
public void getMesPrepareByFactory(String poolName) {
DynamicDataSourceContextHolder.push("ds_"+poolName);// 这是数据源的key
DynamicDataSourceContextHolder.push(poolName);// 这是数据源的key
// List<SapMaterialPreparation> list = sapMaterialPreparationList.stream()
// .filter(a->a.getWERKS().equals(poolName))
// .collect(Collectors.toList());
@ -159,7 +159,7 @@ public class MesPrepareServiceImpl implements IMesPrepareService {
//获取T+1天的所有母工单
MesPrepare qo = new MesPrepare();
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);//这里改为1
cal.add(Calendar.DATE, -1);//这里改为1
Date time = cal.getTime();
qo.setDayStr(new SimpleDateFormat("yyyy-MM-dd").format(time));
List<MesPrepare> parents = mesPrepareMapper.getParentWorkOrderT1(qo);

@ -231,5 +231,9 @@ public class ProOrderController extends BaseController {
public AjaxResult syncSAP() {
return proOrderService.syncSAP();
}
@Log(title = "自动同步SAP订单", businessType = BusinessType.INSERT)
@PostMapping("/syncSAPOrders")
public R syncSAPOrders() {
return proOrderService.syncSAPOrders();
}
}

@ -2,6 +2,7 @@ package com.op.plan.service;
import java.util.List;
import com.op.common.core.domain.R;
import com.op.common.core.web.domain.AjaxResult;
import com.op.plan.domain.Convert;
import com.op.plan.domain.ProOrder;
@ -119,4 +120,6 @@ public interface IProOrderService {
* @return
*/
AjaxResult importOrder(List<ProOrder> orderList);
R syncSAPOrders();
}

@ -1,6 +1,10 @@
package com.op.plan.service.impl;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.alibaba.csp.sentinel.util.StringUtil;
@ -21,7 +25,11 @@ import com.op.plan.domain.dto.SplitOrderDTO;
import com.op.plan.domain.vo.LineAndShiftVo;
import com.op.plan.mapper.*;
import com.op.system.api.RemoteSapService;
import com.op.system.api.RemoteUserService;
import com.op.system.api.domain.SysUser;
import com.op.system.api.model.SapProOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -44,6 +52,7 @@ import static com.op.common.core.web.domain.AjaxResult.success;
*/
@Service
public class ProOrderServiceImpl implements IProOrderService {
protected Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private ProOrderMapper proOrderMapper;
@Autowired
@ -57,7 +66,8 @@ public class ProOrderServiceImpl implements IProOrderService {
@Autowired
private RemoteSapService remoteSapService;
@Autowired
private RemoteUserService remoteUserService;
/**
*
*
@ -239,17 +249,10 @@ public class ProOrderServiceImpl implements IProOrderService {
* sap
*/
@Override
@Transactional(rollbackFor = Exception.class)
@DS("#header.poolName")
public AjaxResult syncSAP() {
SapProOrder sapqo = new SapProOrder();//proOrderMapper.getMaxCreatetime();
//if (sapqo == null) {
// sapqo.setCreateTime(DateUtils.getNowDate());
//}
Calendar calendar = Calendar.getInstance(); //创建Calendar 的实例
calendar.add(Calendar.DAY_OF_MONTH,-1); //当前时间减去一天,即一天前的时间
sapqo.setCreateTime(calendar.getTime());
SapProOrder sapqo = new SapProOrder();
sapqo.setCreateTime(DateUtils.getNowDate());
//获取当前所选工厂
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String key = "#header.poolName";
@ -260,8 +263,16 @@ public class ProOrderServiceImpl implements IProOrderService {
if(CollectionUtils.isEmpty(newOrders)){
return AjaxResult.error("无"+sapqo.getCreateTime()+"之后的最新订单");
}
syncSAPFunc(newOrders);
return success();
}
@Transactional(rollbackFor = Exception.class)
public void syncSAPFunc(List<SapProOrder> newOrders){
ProOrder proOrder = null;
for (SapProOrder sapProOrder : newOrders) {
for (SapProOrder sapProOrder:newOrders) {
//工单下达后整个订单就被锁定//订单存在就更新,不存在就插入
proOrder = new ProOrder();
BeanUtils.copyProperties(sapProOrder, proOrder);
@ -289,17 +300,16 @@ public class ProOrderServiceImpl implements IProOrderService {
if (!CollectionUtils.isEmpty(orderCodes)) {
List<String> idstr = orderCodes.stream().map(order -> order.getId()).collect(Collectors.toList());
String[] ids = idstr.stream().toArray(String[]::new);
//删除工单pro_order_workorder
proOrderWorkorderMapper.deleteProOrderWorkorderByWorkorderIds(ids);
//删除批次pro_order_workorder_batch
proOrderWorkorderBatchMapper.deleteProOrderWorkorderBatchByWorkorderIds(ids);
//删除工单pro_order_workorder
proOrderWorkorderMapper.deleteProOrderWorkorderByWorkorderIds(ids);
}
} else {//关闭订单
//TODO;不更新
remoteSapService.sapCloseOrder(proOrder.getOrderCode());
}
}
}
return success();
}
//父查子递归
@ -418,6 +428,50 @@ public class ProOrderServiceImpl implements IProOrderService {
return checkResult;
}
@Override
public R syncSAPOrders() {
// 加载sf-cloud库的sys_datasource
SysUser sysUser = new SysUser();
sysUser.setUserId(1L);
R<List<Map<String, String>>> dateSources0 = remoteUserService.getPoolNameList(sysUser);
List<Map<String, String>> dateSources = dateSources0.getData();
ExecutorService executorService = new ThreadPoolExecutor(
dateSources.size(),
dateSources.size(),
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
try {
dateSources.forEach(dateSource -> {
logger.info("++++++++++++" + dateSource.get("poolName") + "++++开始++++++++++");
Runnable run = () -> getSAPOrderByFactory(dateSource.get("poolName"));
executorService.execute(run);
});
} catch (Exception e) {
logger.error("service == deviceOfflineTimingTask == exception", e);
return R.fail("service == deviceOfflineTimingTask == exception");
} finally {
executorService.shutdown();
}
return R.ok(true);
}
public void getSAPOrderByFactory(String poolName) {
DynamicDataSourceContextHolder.push(poolName);// 这是数据源的key
SapProOrder sapqo = new SapProOrder();//proOrderMapper.getMaxCreatetime();
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH,-1);
sapqo.setCreateTime(calendar.getTime());
sapqo.setFactoryCode(poolName.replace("ds_",""));
R<List<SapProOrder>> rSapProOrder = remoteSapService.shopOrderSync(sapqo);
List<SapProOrder> newOrders = rSapProOrder.getData();
if(CollectionUtils.isEmpty(newOrders)){
logger.error("无"+sapqo.getCreateTime()+"之后的最新订单");
}
syncSAPFunc(newOrders);
}
/**
*
*

@ -14,6 +14,7 @@ import com.op.sap.service.SapOrderService;
import com.op.sap.service.SapService;
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.model.SapProOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -35,6 +36,7 @@ public class SapController extends BaseController {
@Autowired
private SapMaterialPreparationService sapMaterialPreparationService;
/**
*
* @return
@ -83,8 +85,24 @@ public class SapController extends BaseController {
@PostMapping("/SapCreateOrder")
@Log(title = "生产订单创建接口", businessType = BusinessType.SAP)
public R SapCreateOrder(@RequestBody List<SapCreateOrder> sapCreateOrderList){
public R<List<String>> SapCreateOrder(@RequestBody List<SapCreateOrder> sapCreateOrderList){
return sapOrderService.SapCreateOrder(sapCreateOrderList);
}
/**
*
* @param shopOrder
* @return
*/
@PostMapping("/sapCloseOrder")
@Log(title = "生产订单关闭接口", businessType = BusinessType.SAP)
public R sapCloseOrder(@RequestParam("shopOrder") String shopOrder){
return sapOrderService.sapCloseOrder(shopOrder);
}
@PostMapping("/sapRFWOrder")
@Log(title = "生产订单报工接口", businessType = BusinessType.SAP)
public R sapRFWOrder(@RequestBody SapRFW sapRFW){
return sapOrderService.sapRFWOrder(sapRFW);
}
}

@ -1,8 +1,8 @@
package com.op.sap.service;
import com.op.common.core.domain.R;
import com.op.common.core.web.domain.AjaxResult;
import com.op.system.api.domain.sap.SapCreateOrder;
import com.op.system.api.domain.sap.SapRFW;
import com.op.system.api.model.SapProOrder;
import java.util.List;
@ -11,5 +11,9 @@ public interface SapOrderService {
R<List<SapProOrder>> shopOrderSync(SapProOrder sapProOrder);
R SapCreateOrder(List<SapCreateOrder> sapCreateOrderList);
R<List<String>> SapCreateOrder(List<SapCreateOrder> sapCreateOrderList);
R sapCloseOrder(String shopOrder);
R sapRFWOrder(SapRFW sapRFW);
}

@ -2,11 +2,13 @@ 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.common.core.utils.uuid.IdUtils;
import com.op.common.core.web.domain.AjaxResult;
import com.op.sap.service.SapOrderService;
import com.op.sap.util.SAPConnUtils;
import com.op.system.api.domain.sap.SapCreateOrder;
import com.op.system.api.domain.sap.SapRFW;
import com.op.system.api.model.SapProOrder;
import com.sap.conn.jco.*;
import org.springframework.stereotype.Service;
@ -92,8 +94,8 @@ public class SapOrderServiceImpl implements SapOrderService {
}
@Override
public R SapCreateOrder(List<SapCreateOrder> sapCreateOrderList) {
public R<List<String>> SapCreateOrder(List<SapCreateOrder> sapCreateOrderList) {
String L_MSG=null;
try {
//获取连接
JCoDestination dest = SAPConnUtils.connect();
@ -102,27 +104,137 @@ public class SapOrderServiceImpl implements SapOrderService {
if (func == null) {
throw new RuntimeException("Function does not exist in SAP");
}
// 配置传入参数
JCoParameterList jCoParameterList = func.getImportParameterList();
if (sapCreateOrderList != null && sapCreateOrderList.size() > 0) {
for (SapCreateOrder sapCreateOrder : sapCreateOrderList) {
jCoParameterList.setValue("P_WERKS", sapCreateOrder.getWerks());
jCoParameterList.setValue("P_AUFPAR", sapCreateOrder.getAufpar());
jCoParameterList.setValue("P_MATNR", sapCreateOrder.getMatnr());
jCoParameterList.setValue("P_QUANTITY", sapCreateOrder.getQuantity());
jCoParameterList.setValue("P_DATES", sapCreateOrder.getDates());
jCoParameterList.setValue("P_DATEE", sapCreateOrder.getDatee());
List<String> LV_ORDER_NUM_List=new ArrayList<>();
if (sapCreateOrderList!=null && sapCreateOrderList.size()>0){
for (SapCreateOrder sapCreateOrder:sapCreateOrderList){
jCoParameterList.setValue("P_WERKS",sapCreateOrder.getWerks());
jCoParameterList.setValue("P_AUFPAR",sapCreateOrder.getAufpar());
jCoParameterList.setValue("P_MATNR",sapCreateOrder.getMatnr());
jCoParameterList.setValue("P_QUANTITY",sapCreateOrder.getQuantity());
jCoParameterList.setValue("P_DATES",sapCreateOrder.getDates());
jCoParameterList.setValue("P_DATEE",sapCreateOrder.getDatee());
func.execute(dest);//执行调用函数
JCoParameterList RES = func.getExportParameterList();
System.out.println(RES);
JCoParameterList J= func.getExportParameterList();
System.out.println(J);
L_MSG= func.getExportParameterList().getString("L_MSG");
String LV_ORDER_NUMBER= func.getExportParameterList().getString("LV_ORDER_NUMBER");
if (!StringUtils.isEmpty(LV_ORDER_NUMBER)){
LV_ORDER_NUM_List.add(LV_ORDER_NUMBER);
}else {
return R.fail(L_MSG);
}
}
return R.ok(LV_ORDER_NUM_List,L_MSG);
}else {
return R.fail("接收的数据为空");
}
return R.ok();
} catch (Exception e) {
return R.fail();
}catch (Exception e){
return R.fail(L_MSG);
}
}
@Override
public R sapCloseOrder(String shopOrder) {
String L_MSG=null;
try {
//获取连接
JCoDestination dest = SAPConnUtils.connect();
JCoRepository repository = dest.getRepository();
JCoFunction func = repository.getFunction("ZPPR_MES_PRODORD_CLOSE");
if (func == null) {
throw new RuntimeException("Function does not exist in SAP");
}
// 配置传入参数
JCoParameterList jCoParameterList = func.getImportParameterList();
if (StringUtils.isEmpty(shopOrder)){
return R.fail("订单号为空");
}
jCoParameterList.setValue("P_AUFNR",shopOrder);
func.execute(dest);//执行调用函数
JCoParameterList J= func.getExportParameterList();
System.out.println(J);
L_MSG= func.getExportParameterList().getString("L_MSG");
if (StringUtils.isEmpty(L_MSG)){
return R.fail("订单关闭失败");
}
return R.ok(L_MSG);
}catch (Exception e){
return R.fail(e.getMessage());
}
}
@Override
public R sapRFWOrder(SapRFW sapRFW) {
String MESSAGE=null;
try {
//获取连接
JCoDestination dest = SAPConnUtils.connect();
JCoRepository repository = dest.getRepository();
JCoFunction func = repository.getFunction("ZPPR_MES_PRODORDCONF_CREATE_TT");
if (func == null) {
throw new RuntimeException("Function does not exist in SAP");
}
// 配置传入参数
JCoParameterList jCoParameterList = func.getImportParameterList();
if (StringUtils.isEmpty(sapRFW.getAufnr())){
return R.fail("订单号为空");
}
if (StringUtils.isEmpty(sapRFW.getGamng())){
return R.fail("报工数量为空");
}
//订单号
jCoParameterList.setValue("P_AUFNR",sapRFW.getAufnr());
//报工数量
jCoParameterList.setValue("P_GAMNG",sapRFW.getGamng());
if (sapRFW.getLt_gs()==null){
return R.fail("生产订单报工工时为空");
}
if (sapRFW.getLt_hw()==null){
return R.fail("生产订单报工货物移动为空");
}
/**
* LT_GS
*/
JCoTable LT_GS_jCoTable = func.getTableParameterList().getTable("LT_GS");
System.out.println("LT_GS_jCoTable"+LT_GS_jCoTable);
LT_GS_jCoTable.appendRow();
LT_GS_jCoTable.setValue("CONF_ACTIVITY1", sapRFW.getLt_gs().getConf_activity1());
LT_GS_jCoTable.setValue("CONF_ACTIVITY2", sapRFW.getLt_gs().getConf_activity2());
LT_GS_jCoTable.setValue("CONF_ACTIVITY3", sapRFW.getLt_gs().getConf_activity3());
LT_GS_jCoTable.setValue("CONF_ACTIVITY4", sapRFW.getLt_gs().getConf_activity4());
LT_GS_jCoTable.setValue("CONF_ACTIVITY5", sapRFW.getLt_gs().getConf_activity5());
LT_GS_jCoTable.setValue("CONF_ACTIVITY6", sapRFW.getLt_gs().getConf_activity6());
/**
* MES LT_HW
*/
JCoTable LT_HW_jCoTable = func.getTableParameterList().getTable("LT_HW");
System.out.println("LT_HW_jCoTable"+LT_HW_jCoTable);
LT_HW_jCoTable.appendRow();
LT_HW_jCoTable.setValue("MATERIAL", sapRFW.getLt_hw().getMaterial());
LT_HW_jCoTable.setValue("ENTRY_QNT", sapRFW.getLt_hw().getEntry_qnt());
func.execute(dest);//执行调用函数
JCoParameterList J= func.getExportParameterList();
System.out.println(J);
MESSAGE= func.getExportParameterList().getString("MESSAGE");
if (StringUtils.isEmpty(MESSAGE)){
return R.fail("订单关闭失败");
}
return R.ok(MESSAGE);
}catch (Exception e){
return R.fail(e.getMessage());
}
}
}

Loading…
Cancel
Save