增加修改派工单状态接口

Leon 4 years ago
parent 33e6094af0
commit c63daa7ef6

@ -46,4 +46,10 @@ public interface Constants {
//叫料类型
String CALL_TYPE_MATERIAL = "MATERIAL";
String CALL_TYPE_OPERATION = "OPERATION";
//叫料状态
String CALL_ITEM_STATUS_NEW = "801";
String CALL_ITEM_STATUS_CALLED = "802";
String CALL_ITEM_STATUS_ISSUED = "803";
String CALL_ITEM_STATUS_CANCELED = "804";
}

@ -110,6 +110,10 @@ public enum HandleEnum {
/**不良代码组**/
NC_GROUP("NCGroupBO","NCGroupBO:{0},{1}"),
/**数据类型**/
DATA_TYPE("DataTypeBO", "DataTypeBO:{0},{1},{2}"),
/**设备检验任务的检验项**/
RESOURCE_INSPECT_TASK_SPARE("ResourceInspectTaskSpareBo","ResourceInspectTaskSpareBo:{0},{1}"),

@ -0,0 +1,21 @@
package com.foreverwin.mesnac.common.service;
/**
*
*
*
* @author Leon
* @date2021/7/7
*/
public interface SfcDispatchCommonService {
/**
*
*
* @param site
* @param user
* @param dispatchNo
* @param dispatchStatus
*/
void updateSfcDispatchStatus(String site, String user, String dispatchNo, String dispatchStatus);
}

@ -1,4 +1,6 @@
common.export.noTemplate.error = 当前主数据模板字段未维护
MaterData.import.insert.fail = 数据新增失败: - > 行项: {0}, 位置: {1}, 错误信息: {2}
MaterData.import.update.fail = 数据更新失败: - > 行项: {0}, 位置: {1}, 错误信息: {2}
MaterData.import.Summary = 导入完成:->总共导入数据:{0}, 成功:{1}, 失败:{2}
MaterData.import.createfail.resource = 资源创建失败: - > 行项: {0}, 位置: {1}, 错误信息: {2}
MaterData.import.updatefail.resource = 资源更新失败: - > 行项: {0}, 位置: {1}, 错误信息: {2}

@ -18,21 +18,27 @@ import java.util.List;
import java.util.Locale;
/**
* &
*
* @author Leon
* @date 2021/7/6
*/
public class CustomDataWSClient {
static Logger log4j = Logger.getLogger(CustomDataWSClient.class);
private static Logger log4j = Logger.getLogger(CustomDataWSClient.class);
public static String getSiteDefaultLang(String site) {
SiteConfigurationServiceInterface siteConfigurationService = null;
try {
siteConfigurationService = MEServices.create("com.sap.me.plant", "SiteConfigurationService", site);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//siteLocale
String objRef = "SiteBO:" + site;
ObjectReference request = new ObjectReference(objRef);
try {
SiteFullConfiguration tm = siteConfigurationService.readSite(request);
@ -54,6 +60,7 @@ public class CustomDataWSClient {
public static String update(JSONObject data, String ref, String objectAlias) throws Exception{
String site = (String) data.get("site");
SaveCustomDataRequest request = new SaveCustomDataRequest();
request.setRef(ref);
request.setObjectAlias(objectAlias);
@ -63,15 +70,14 @@ public class CustomDataWSClient {
JSONArray customArray = data.getJSONArray("customData");
if (customArray != null && customArray.size() > 0) {
List<CustomValue> customData = new ArrayList();
for (int i = 0; i < customArray.size(); i++) {
JSONObject custObject = customArray.getJSONObject(i);
String cust = custObject.getString("attribute");
String value = custObject.getString("value");
CustomValue cv = new CustomValue(cust, value);
JSONObject customObject = customArray.getJSONObject(i);
String attribute = customObject.getString("attribute");
String value = customObject.getString("value");
CustomValue cv = new CustomValue(attribute, value);
customData.add(cv);
}

@ -0,0 +1,62 @@
package com.foreverwin.mesnac.dataimport.client;
import com.alibaba.fastjson.JSONObject;
import com.foreverwin.mesnac.common.enums.HandleEnum;
import com.foreverwin.mesnac.common.util.ExceptionUtil;
import com.foreverwin.mesnac.common.util.StringUtil;
import com.foreverwin.modular.core.meext.MEServices;
import com.sap.me.common.ObjectAliasEnum;
import com.sap.me.common.ObjectReference;
import com.sap.me.productdefinition.ItemConfigurationServiceInterface;
import com.sap.me.productdefinition.ItemFullConfiguration;
import java.math.BigDecimal;
/**
*
*
* @author Leon
* @date 2021/7/6
*/
public class ItemWSClient {
public static ItemFullConfiguration find(JSONObject data) {
try {
String site = (String) data.get("site");
String item = data.getString("item");
//物料只有一个版本默认A
String objRef = HandleEnum.ITEM.getHandle(site, item, "A");
//----------------------------------------------------------------------------------------------------------
ItemConfigurationServiceInterface itemConfigurationService = MEServices.create("com.sap.me.productdefinition", "ItemConfigurationService", site);
ObjectReference request = new ObjectReference(objRef);
ItemFullConfiguration op = itemConfigurationService.readItem(request);
return op;
} catch (Exception e) {
}
return null;
}
public static String update(JSONObject jsonObject, ItemFullConfiguration itemFull) {
try {
String site = jsonObject.getString("site");
//批次大小
String lotSize = jsonObject.getString("lotSize");
lotSize = StringUtil.notBlank(lotSize) ? lotSize : "999999";
//---------------------------------------------------------------------------------------
ItemConfigurationServiceInterface itemConfigurationService = MEServices.create("com.sap.me.productdefinition", "ItemConfigurationService", site);
itemFull.setLotSize(new BigDecimal(lotSize));
itemConfigurationService.updateItem(itemFull);
//自定义字段保存
CustomDataWSClient.update(jsonObject, itemFull.getRef(), ObjectAliasEnum.ITEM.value());
} catch (Exception e) {
return ExceptionUtil.getExceptionMsg(e);
}
return null;
}
}

@ -0,0 +1,247 @@
package com.foreverwin.mesnac.dataimport.client;
import com.alibaba.fastjson.JSONObject;
import com.foreverwin.mesnac.common.enums.HandleEnum;
import com.foreverwin.mesnac.common.util.ExceptionUtil;
import com.foreverwin.mesnac.common.util.StringUtil;
import com.foreverwin.modular.core.meext.MEServices;
import com.sap.me.common.BasicStatusEnum;
import com.sap.me.common.ObjectReference;
import com.sap.me.nonconformance.*;
import javax.xml.datatype.DatatypeConstants;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
*
*
* @author Leon
* @date 2021/7/6
*/
public class NcCodeWSClient {
/**
*
*
* @param jsonObject
* @return
*/
public static NcCodeFullConfiguration find(JSONObject jsonObject) {
NcCodeFullConfiguration ncCodeFullConfiguration = null;
try {
String site = jsonObject.getString("site");
String ncCode = jsonObject.getString("ncCode");
String ncCodeBo = HandleEnum.NC_CODE.getHandle(site, ncCode);
//------------------------------------------------------------------------------------------------
NcCodeConfigurationServiceInterface ncCodeConfigurationService = MEServices.create("com.sap.me.nonconformance", "NcCodeConfigurationService", site);
ObjectReference objectReference = new ObjectReference(ncCodeBo);
ncCodeFullConfiguration = ncCodeConfigurationService.readNcCode(objectReference);
} catch (Exception e) {
}
return ncCodeFullConfiguration;
}
/**
*
*
* @param jsonObject
* @return
*/
public static String create(JSONObject jsonObject) {
try {
String site = jsonObject.getString("site");
String ncCode = jsonObject.getString("ncCode");
String ncCodeBo = HandleEnum.NC_CODE.getHandle(site, ncCode);
String category = jsonObject.getString("category");
String dataType = jsonObject.getString("dataType");
String description = jsonObject.getString("descZH");
String closureRequired = jsonObject.getString("closureRequired");
String canBePrimaryCode = jsonObject.getString("canBePrimaryCode");
String autoClosePrimary = jsonObject.getString("autoClosePrimary");
String autoCloseIncident = jsonObject.getString("autoCloseIncident");
String secondaryRequireForClose = jsonObject.getString("secondaryRequireForClose");
//------------------------------------------------------------------------------------------------
NcCodeConfiguration ncCodeConfiguration = new NcCodeConfiguration();
ncCodeConfiguration.setRef(ncCodeBo);
ncCodeConfiguration.setNcCode(ncCode);
ncCodeConfiguration.setDescription(description);
ncCodeConfiguration.setStatus(BasicStatusEnum.ENABLED);
//不合格代码组
String ncGroup = jsonObject.getString("ncGroup");
NcGroupMember ncGroupMember = new NcGroupMember();
String ncGroupBo = HandleEnum.NC_GROUP.getHandle(site, ncGroup);
ncGroupMember.setNcGroupRef(ncGroupBo);
ncCodeConfiguration.getNcGroupMemberList().add(ncGroupMember);
//不合格代码类型
NCCategory ncCodeCategory = NCCategory.FAILURE;
switch (category) {
case "故障" :
ncCodeCategory = NCCategory.FAILURE;
break;
case "缺陷" :
ncCodeCategory = NCCategory.DEFECT;
break;
case "修复" :
ncCodeCategory = NCCategory.REPAIR;
break;
default: break;
}
ncCodeConfiguration.setNcCategory(ncCodeCategory);
//不合格数据类型
dataType = StringUtil.notBlank(dataType) ? dataType : "SIMPLE";
String ncDataTypeRef = HandleEnum.DATA_TYPE.getHandle(site, "NC", dataType);
ncCodeConfiguration.setNcDataTypeRef(ncDataTypeRef);
//需要关闭
ncCodeConfiguration.setClosureRequired("是".equals(closureRequired) ? true : false);
//是否可以是主要代码
ncCodeConfiguration.setCanBePrimaryCode("是".equals(canBePrimaryCode) ? true : false);
ncCodeConfiguration.setAutoClosePrimary("是".equals(autoClosePrimary) ? true : false);
ncCodeConfiguration.setAutoCloseIncident("是".equals(autoCloseIncident) ? true : false);
ncCodeConfiguration.setSecondaryRequiredForClose("是".equals(secondaryRequireForClose) ? true : false);
//次要不良项目
String secondaryCodes = jsonObject.getString("secondaryCode");
if (StringUtil.notBlank(secondaryCodes)) {
List<NcSecondaryCode> ncSecondaryCodeList = new ArrayList<>();
if (!secondaryCodes.contains(":")) {
NcSecondaryCode ncSecondaryCode = new NcSecondaryCode();
String ncCodeRef = HandleEnum.NC_CODE.getHandle(site, secondaryCodes);
ncSecondaryCode.setNcCodeRef(ncCodeRef);
ncSecondaryCodeList.add(ncSecondaryCode);
} else {
String [] secondaryCodeArray = secondaryCodes.split(":");
for (String secondaryCode: secondaryCodeArray) {
NcSecondaryCode ncSecondaryCode = new NcSecondaryCode();
String ncCodeRef = HandleEnum.NC_CODE.getHandle(site, secondaryCode);
ncSecondaryCode.setNcCodeRef(ncCodeRef);
ncSecondaryCodeList.add(ncSecondaryCode);
}
}
ncCodeConfiguration.setNcSecondaryCodeList(ncSecondaryCodeList);
}
//NC最大限制值
String maxNcLimit = jsonObject.getString("maxNcLimit");
maxNcLimit = StringUtil.notBlank(maxNcLimit) ? maxNcLimit : "10";
ncCodeConfiguration.setMaxNcLimit(new BigDecimal(maxNcLimit));
//------------------------------------------------------------------------------------------------
NcCodeConfigurationServiceInterface ncCodeConfigurationService = MEServices.create("com.sap.me.nonconformance", "NcCodeConfigurationService", site);
ncCodeConfigurationService.createNcCode(ncCodeConfiguration);
} catch (Exception e) {
return ExceptionUtil.getExceptionMsg(e);
}
return null;
}
/**
*
*
* @param jsonObject
* @param ncCodeFullConfiguration
* @return
*/
public static String update(JSONObject jsonObject, NcCodeFullConfiguration ncCodeFullConfiguration) {
try {
String site = jsonObject.getString("site");
String category = jsonObject.getString("category");
String dataType = jsonObject.getString("dataType");
String description = jsonObject.getString("descZH");
String closureRequired = jsonObject.getString("closureRequired");
String canBePrimaryCode = jsonObject.getString("canBePrimaryCode");
String autoClosePrimary = jsonObject.getString("autoClosePrimary");
String autoCloseIncident = jsonObject.getString("autoCloseIncident");
String secondaryRequireForClose = jsonObject.getString("secondaryRequireForClose");
//------------------------------------------------------------------------------------------------
ncCodeFullConfiguration.setDescription(description);
ncCodeFullConfiguration.setStatus(BasicStatusEnum.ENABLED);
//不合格代码组
String ncGroup = jsonObject.getString("ncGroup");
NcGroupMember ncGroupMember = new NcGroupMember();
String ncGroupBo = HandleEnum.NC_GROUP.getHandle(site, ncGroup);
ncGroupMember.setNcGroupRef(ncGroupBo);
ncCodeFullConfiguration.getNcGroupMemberList().add(ncGroupMember);
//不合格代码类型
NCCategory ncCodeCategory = NCCategory.FAILURE;
switch (category) {
case "故障" :
ncCodeCategory = NCCategory.FAILURE;
break;
case "缺陷" :
ncCodeCategory = NCCategory.DEFECT;
break;
case "修复" :
ncCodeCategory = NCCategory.REPAIR;
break;
default: break;
}
ncCodeFullConfiguration.setNcCategory(ncCodeCategory);
//不合格数据类型
dataType = StringUtil.notBlank(dataType) ? dataType : "SIMPLE";
String ncDataTypeRef = HandleEnum.DATA_TYPE.getHandle(site, "NC", dataType);
ncCodeFullConfiguration.setNcDataTypeRef(ncDataTypeRef);
//需要关闭
ncCodeFullConfiguration.setClosureRequired("是".equals(closureRequired) ? true : false);
//是否可以是主要代码
ncCodeFullConfiguration.setCanBePrimaryCode("是".equals(canBePrimaryCode) ? true : false);
ncCodeFullConfiguration.setAutoClosePrimary("是".equals(autoClosePrimary) ? true : false);
ncCodeFullConfiguration.setAutoCloseIncident("是".equals(autoCloseIncident) ? true : false);
ncCodeFullConfiguration.setSecondaryRequiredForClose("是".equals(secondaryRequireForClose) ? true : false);
//次要不良项目
String secondaryCodes = jsonObject.getString("secondaryCode");
if (StringUtil.notBlank(secondaryCodes)) {
List<NcSecondaryCode> ncSecondaryCodeList = new ArrayList<>();
if (!secondaryCodes.contains(":")) {
NcSecondaryCode ncSecondaryCode = new NcSecondaryCode();
String ncCodeRef = HandleEnum.NC_CODE.getHandle(site, secondaryCodes);
ncSecondaryCode.setNcCodeRef(ncCodeRef);
ncSecondaryCodeList.add(ncSecondaryCode);
} else {
String [] secondaryCodeArray = secondaryCodes.split(":");
for (String secondaryCode: secondaryCodeArray) {
NcSecondaryCode ncSecondaryCode = new NcSecondaryCode();
String ncCodeRef = HandleEnum.NC_CODE.getHandle(site, secondaryCode);
ncSecondaryCode.setNcCodeRef(ncCodeRef);
ncSecondaryCodeList.add(ncSecondaryCode);
}
}
ncCodeFullConfiguration.setNcSecondaryCodeList(ncSecondaryCodeList);
}
//NC最大限制值
String maxNcLimit = jsonObject.getString("maxNcLimit");
maxNcLimit = StringUtil.notBlank(maxNcLimit) ? maxNcLimit : "10";
ncCodeFullConfiguration.setMaxNcLimit(new BigDecimal(maxNcLimit));
//------------------------------------------------------------------------------------------------
NcCodeConfigurationServiceInterface ncCodeConfigurationService = MEServices.create("com.sap.me.nonconformance", "NcCodeConfigurationService", site);
ncCodeConfigurationService.updateNcCode(ncCodeFullConfiguration);
} catch (Exception e) {
return ExceptionUtil.getExceptionMsg(e);
}
return null;
}
}

@ -0,0 +1,135 @@
package com.foreverwin.mesnac.dataimport.client;
import com.alibaba.fastjson.JSONObject;
import com.foreverwin.mesnac.common.enums.HandleEnum;
import com.foreverwin.mesnac.common.util.ExceptionUtil;
import com.foreverwin.mesnac.common.util.StringUtil;
import com.foreverwin.modular.core.meext.MEServices;
import com.sap.me.common.ObjectReference;
import com.sap.me.nonconformance.NcGroupConfigurationServiceInterface;
import com.sap.me.nonconformance.NcGroupFullConfiguration;
import com.sap.me.nonconformance.NcGroupValidOperation;
import java.util.ArrayList;
import java.util.List;
/**
*
*
* @author Leon
* @date 2021/7/6
*/
public class NcGroupWSClient {
/**
*
*
* @param jsonObject
* @return
*/
public static NcGroupFullConfiguration find(JSONObject jsonObject) {
NcGroupFullConfiguration ncGroupFullConfiguration = null;
try {
String site = jsonObject.getString("site");
String ncGroup = jsonObject.getString("ncGroup");
String ncGroupBo = HandleEnum.NC_GROUP.getHandle(site, ncGroup);
//---------------------------------------------------------------------------------------------------
NcGroupConfigurationServiceInterface ncGroupConfigurationService = MEServices.create("com.sap.me.nonconformance", "NcGroupConfigurationService", site);
ObjectReference objectReference = new ObjectReference(ncGroupBo);
ncGroupFullConfiguration = ncGroupConfigurationService.readNcGroup(objectReference);
} catch (Exception e) {
//-------------------
}
return ncGroupFullConfiguration;
}
/**
*
*
* @param jsonObject
* @return
*/
public static String create(JSONObject jsonObject) {
try {
String site = jsonObject.getString("site");
String ncGroup = jsonObject.getString("ncGroup");
String description = jsonObject.getString("description");
String applyAll = jsonObject.getString("applyAll");
String applyOperation = jsonObject.getString("applyOperation");
String ncGroupBo = HandleEnum.NC_GROUP.getHandle(site, ncGroup);
//---------------------------------------------------------------------------------------------------
NcGroupConfigurationServiceInterface ncGroupConfigurationService = MEServices.create("com.sap.me.nonconformance", "NcGroupConfigurationService", site);
NcGroupFullConfiguration ncGroupFullConfiguration = new NcGroupFullConfiguration();
ncGroupFullConfiguration.setRef(ncGroupBo);
ncGroupFullConfiguration.setNcGroup(ncGroup);
ncGroupFullConfiguration.setDescription(description);
if ("true".equals(applyAll)) {
ncGroupFullConfiguration.setValidAtAllOperations(true);
} else {
if (StringUtil.notBlank(applyOperation) && applyOperation.contains(";")) {
List<NcGroupValidOperation> list = new ArrayList<>();
String[] operationList = applyOperation.split(";");
for (String operation: operationList) {
NcGroupValidOperation ncGroupValidOperation = new NcGroupValidOperation();
String operationBo = HandleEnum.OPERATION.getHandle(site, operation, "#");
ncGroupValidOperation.setOperationRef(operationBo);
list.add(ncGroupValidOperation);
}
ncGroupFullConfiguration.setNcGroupValidOperationList(list);
}
}
ncGroupConfigurationService.createNcGroup(ncGroupFullConfiguration);
} catch (Exception e) {
return ExceptionUtil.getExceptionMsg(e);
}
return null;
}
/**
*
*
* @param jsonObject
* @param ncGroupFull
* @return
*/
public static String update(JSONObject jsonObject, NcGroupFullConfiguration ncGroupFull) {
try {
String site = jsonObject.getString("site");
String description = jsonObject.getString("description");
String applyAll = jsonObject.getString("applyAll");
String applyOperation = jsonObject.getString("applyOperation");
//---------------------------------------------------------------------------------------------------
NcGroupConfigurationServiceInterface ncGroupConfigurationService = MEServices.create("com.sap.me.nonconformance", "NcGroupConfigurationService", site);
ncGroupFull.setDescription(description);
if ("true".equals(applyAll)) {
ncGroupFull.setValidAtAllOperations(true);
} else {
if (StringUtil.notBlank(applyOperation) && applyOperation.contains(";")) {
List<NcGroupValidOperation> list = new ArrayList<>();
String[] operationList = applyOperation.split(";");
for (String operation: operationList) {
NcGroupValidOperation ncGroupValidOperation = new NcGroupValidOperation();
String operationBo = HandleEnum.OPERATION.getHandle(site, operation, "#");
ncGroupValidOperation.setOperationRef(operationBo);
list.add(ncGroupValidOperation);
}
ncGroupFull.setNcGroupValidOperationList(list);
}
}
ncGroupConfigurationService.updateNcGroup(ncGroupFull);
} catch (Exception e) {
return ExceptionUtil.getExceptionMsg(e);
}
return null;
}
}

@ -0,0 +1,80 @@
package com.foreverwin.mesnac.dataimport.client;
import com.alibaba.fastjson.JSONObject;
import com.foreverwin.mesnac.common.enums.HandleEnum;
import com.foreverwin.mesnac.common.util.ExceptionUtil;
import com.foreverwin.modular.core.meext.MEServices;
import com.sap.me.common.ObjectAliasEnum;
import com.sap.me.plant.FindResourceTypeByKeyFieldsRequest;
import com.sap.me.plant.ResourceTypeBasicConfiguration;
import com.sap.me.plant.ResourceTypeConfiguration;
import com.sap.me.plant.ResourceTypeConfigurationServiceInterface;
import java.util.Collection;
/**
*
*
*
* @author Leon
* @date 2021/7/6
*/
public class ResourceTypeWSClient {
/**
*
*
* @param jsonObject
* @return
*/
public static Collection<ResourceTypeBasicConfiguration> find(JSONObject jsonObject) {
Collection<ResourceTypeBasicConfiguration> collection = null;
try {
String site = jsonObject.getString("site");
String resourceType = jsonObject.getString("resourceType");
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
ResourceTypeConfigurationServiceInterface resourceTypeService = MEServices.create("com.sap.me.plant", "ResourceTypeConfigurationService", site);
FindResourceTypeByKeyFieldsRequest resourceTypeRequest = new FindResourceTypeByKeyFieldsRequest();
resourceTypeRequest.setResourceType(resourceType);
collection = resourceTypeService.findResourceTypeByKeyFields(resourceTypeRequest);
} catch (Exception e) {
//----------------
}
return collection;
}
/**
*
*
* @param jsonObject
* @return
*/
public static String insert(JSONObject jsonObject) {
try {
String site = jsonObject.getString("site");
String resourceType = jsonObject.getString("resourceType");
String description = jsonObject.getString("description");
String resourceTypeBo = HandleEnum.RESOURCE_TYPE.getHandle(site, resourceType);
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
ResourceTypeConfigurationServiceInterface resourceTypeService = MEServices.create("com.sap.me.plant", "ResourceTypeConfigurationService", site);
ResourceTypeConfiguration resourceTypeConfiguration = new ResourceTypeConfiguration();
resourceTypeConfiguration.setRef(resourceTypeBo);
resourceTypeConfiguration.setResourceType(resourceType);
resourceTypeConfiguration.setDescription(description);
resourceTypeService.createResourceType(resourceTypeConfiguration);
//自定义字段更新
CustomDataWSClient.update(jsonObject, resourceTypeBo, ObjectAliasEnum.RESOURCE_TYPE.value());
return null;
} catch (Exception e) {
return ExceptionUtil.getExceptionMsg(e);
}
}
}

@ -3,6 +3,7 @@ package com.foreverwin.mesnac.dataimport.client;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.foreverwin.mesnac.common.constant.DataImportConstant;
import com.foreverwin.mesnac.common.enums.HandleEnum;
import com.foreverwin.mesnac.dataimport.util.AppUtil;
import com.foreverwin.mesnac.meapi.model.WorkCenter;
import com.foreverwin.mesnac.meapi.model.WorkCenterMember;
@ -19,6 +20,14 @@ import java.lang.reflect.UndeclaredThrowableException;
import java.util.ArrayList;
import java.util.List;
/**
*
*
*
* @author Leon
* @date 2021/7/6
*/
public class ResourceWSClient {
/**
@ -30,13 +39,18 @@ public class ResourceWSClient {
try {
String site = (String) data.get("site");
String resource = data.getString("resource").toUpperCase();
String resourceBo = HandleEnum.RESOURCE.getHandle(site, resource);
ObjectReference request = new ObjectReference();
request.setRef("ResourceBO:" + site + "," + resource);
request.setRef(resourceBo);
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ResourceConfigurationServiceInterface resourceConfigurationService = MEServices.create("com.sap.me.plant", "ResourceConfigurationService", site);
ResourceFullConfiguration op = resourceConfigurationService.readResource(request);
return op;
} catch (Exception e) {
e.printStackTrace();
//---------
}
return null;
@ -51,7 +65,7 @@ public class ResourceWSClient {
try {
String site = (String) data.get("site");
String resource = data.getString("resource").toUpperCase();
String resourceRef = "ResourceBO:" + site + "," + resource;
String resourceRef = HandleEnum.RESOURCE.getHandle(site, resource);
//资源主数据对象
CreateResourceRequest request = new CreateResourceRequest();

@ -10,12 +10,22 @@ public class HandlerFactory {
public static Handler getHandler(String handleType){
switch (handleType){
case "item" :
return new ItemHandler();
case "resourceType":
return new ResourceTypeHandler();
case "resource":
return new ResourceHandler();
case "operation" :
return new OperationHandler();
case "workCenter" :
return new WorkCenterHandler();
case "ncGroup" :
return new NCGroupHandler();
case "ncCode" :
return new NCCodeHandler();
case "messageType" :
//return new MessageTypeHandler();
}
return null;

@ -0,0 +1,92 @@
package com.foreverwin.mesnac.dataimport.handler;
import com.alibaba.fastjson.JSONObject;
import com.foreverwin.mesnac.dataimport.client.ItemWSClient;
import com.foreverwin.mesnac.dataimport.handler.base.BaseHandler;
import com.foreverwin.mesnac.dataimport.reader.FileReader;
import com.foreverwin.mesnac.dataimport.reader.FileReaderBuilder;
import com.foreverwin.mesnac.dataimport.reader.RowVisitor;
import com.foreverwin.mesnac.dataimport.service.MasterObjectDefine;
import com.foreverwin.modular.core.exception.BusinessException;
import com.foreverwin.modular.core.util.I18nUtil;
import com.sap.me.productdefinition.ItemFullConfiguration;
import java.io.InputStream;
import java.util.Map;
public class ItemHandler extends BaseHandler {
@Override
public String importFile(String site, InputStream inputStream, String fileType, String mode) throws Exception {
int row = 0;
StringBuffer buffer = new StringBuffer();
Integer[] failedNumber = new Integer[]{0};
try {
FileReader fileReader = new FileReaderBuilder().build(fileType);
RowVisitor<JSONObject> visitor = getRowVisitor(site, mode, buffer, failedNumber);
row = fileReader.visitor(visitor).read(inputStream, getHeaders());
} catch (Exception e) {
buffer.append(e.getMessage() + "\n");
}
if (buffer.length() > 0) {
buffer.insert(0, I18nUtil.getI18nText("MaterData.import.Summary", new Object[]{row + failedNumber[0], row, failedNumber[0]}) + "\n");
throw BusinessException.build(buffer.toString());
}
buffer.insert(0, I18nUtil.getI18nText("MaterData.import.Summary", new Object[]{row + failedNumber[0], row, failedNumber[0]}) + "\n");
return buffer.toString();
}
@Override
public Map<String, String> getHeaders() {
return MasterObjectDefine.getHeadsMapping("ITEM");
}
public RowVisitor<JSONObject> getRowVisitor(String site, String mode, StringBuffer buffer, Integer[] failedNumber) {
return new RowVisitor<JSONObject>() {
@Override
public int visit(long index, JSONObject jsonObject) {
Object[] params = new Object[10];
params[0] = index;
params[1] = jsonObject.getString("item");
String resultMessage = null;
try {
if (jsonObject.containsKey("item") && jsonObject.getString("item").trim().length() > 0) {
jsonObject.put("site", site);
ItemFullConfiguration itemFull = ItemWSClient.find(jsonObject);
if (itemFull == null) {
resultMessage = "物料主数据不存在";
}
ItemWSClient.update(jsonObject, itemFull);
if (resultMessage != null) {
params[2] = resultMessage;
failedNumber[0]++;
buffer.append("第" + index + "行:" + I18nUtil.getI18nText("MaterData.import.update.fail", params) + "\n");
return 0;
}
}
return 0;
} catch (Exception e) {
params[2] = e.getMessage();
failedNumber[0]++;
buffer.append("第" + index + "行:" + I18nUtil.getI18nText("MaterData.import.update.fail", params) + "\n");
}
return 0;
}
@Override
public String[] getHeader() {
return null;
}
};
}
}

@ -0,0 +1,112 @@
package com.foreverwin.mesnac.dataimport.handler;
import com.alibaba.fastjson.JSONObject;
import com.foreverwin.mesnac.dataimport.client.ItemWSClient;
import com.foreverwin.mesnac.dataimport.client.NcCodeWSClient;
import com.foreverwin.mesnac.dataimport.client.NcGroupWSClient;
import com.foreverwin.mesnac.dataimport.handler.base.BaseHandler;
import com.foreverwin.mesnac.dataimport.reader.FileReader;
import com.foreverwin.mesnac.dataimport.reader.FileReaderBuilder;
import com.foreverwin.mesnac.dataimport.reader.RowVisitor;
import com.foreverwin.mesnac.dataimport.service.MasterObjectDefine;
import com.foreverwin.mesnac.dataimport.util.AppUtil;
import com.foreverwin.modular.core.exception.BusinessException;
import com.foreverwin.modular.core.util.I18nUtil;
import com.sap.me.common.ObjectAliasEnum;
import com.sap.me.nonconformance.NcCodeFullConfiguration;
import com.sap.me.nonconformance.NcGroupFullConfiguration;
import com.sap.me.productdefinition.ItemFullConfiguration;
import java.io.InputStream;
import java.util.Map;
public class NCCodeHandler extends BaseHandler {
@Override
public String importFile(String site, InputStream inputStream, String fileType, String mode) throws Exception {
int row = 0;
StringBuffer buffer = new StringBuffer();
Integer[] failedNumber = new Integer[]{0};
try {
FileReader fileReader = new FileReaderBuilder().build(fileType);
RowVisitor<JSONObject> visitor = getRowVisitor(site, mode, buffer, failedNumber);
row = fileReader.visitor(visitor).read(inputStream, getHeaders());
} catch (Exception e) {
buffer.append(e.getMessage() + "\n");
}
if (buffer.length() > 0) {
buffer.insert(0, I18nUtil.getI18nText("MaterData.import.Summary", new Object[]{row + failedNumber[0], row, failedNumber[0]}) + "\n");
throw BusinessException.build(buffer.toString());
}
buffer.insert(0, I18nUtil.getI18nText("MaterData.import.Summary", new Object[]{row + failedNumber[0], row, failedNumber[0]}) + "\n");
return buffer.toString();
}
@Override
public Map<String, String> getHeaders() {
return MasterObjectDefine.getHeadsMapping(ObjectAliasEnum.NC_CODE.value());
}
public RowVisitor<JSONObject> getRowVisitor(String site, String mode, StringBuffer buffer, Integer[] failedNumber) {
return new RowVisitor<JSONObject>() {
@Override
public int visit(long index, JSONObject jsonObject) {
Object[] params = new Object[10];
params[0] = index;
params[1] = jsonObject.getString("ncCode");
boolean insert = false;
String resultMessage = null;
try {
if (jsonObject.containsKey("ncGroup") && jsonObject.getString("ncGroup").trim().length() > 0) {
jsonObject.put("site", site);
NcCodeFullConfiguration ncCodeFull = NcCodeWSClient.find(jsonObject);
if (ncCodeFull == null) {
if (AppUtil.canInsert(mode)) {
insert = true;
NcGroupWSClient.create(jsonObject);
}else if(AppUtil.canUpdate(mode)) {
resultMessage = ("第" + index + "行:" + I18nUtil.getI18nText("MaterData.import.update.fail", params) + "\n");
}
} else {
if (AppUtil.canUpdate(mode)) {
NcCodeWSClient.update(jsonObject, ncCodeFull);
}
}
if (resultMessage != null) {
params[2] = resultMessage;
failedNumber[0]++;
buffer.append("第" + index + "行:" + I18nUtil.getI18nText("MaterData.import.update.fail", params) + "\n");
return 0;
}
}
return 0;
} catch (Exception e) {
params[2] = e.getMessage();
failedNumber[0]++;
if (insert) {
buffer.append("第" + index + "行:" + I18nUtil.getI18nText("MaterData.import.insert.fail", params) + "\n");
} else {
buffer.append("第" + index + "行:" + I18nUtil.getI18nText("MaterData.import.update.fail", params) + "\n");
}
}
return 0;
}
@Override
public String[] getHeader() {
return null;
}
};
}
}

@ -0,0 +1,105 @@
package com.foreverwin.mesnac.dataimport.handler;
import com.alibaba.fastjson.JSONObject;
import com.foreverwin.mesnac.dataimport.client.NcGroupWSClient;
import com.foreverwin.mesnac.dataimport.handler.base.BaseHandler;
import com.foreverwin.mesnac.dataimport.reader.FileReader;
import com.foreverwin.mesnac.dataimport.reader.FileReaderBuilder;
import com.foreverwin.mesnac.dataimport.reader.RowVisitor;
import com.foreverwin.mesnac.dataimport.service.MasterObjectDefine;
import com.foreverwin.mesnac.dataimport.util.AppUtil;
import com.foreverwin.modular.core.exception.BusinessException;
import com.foreverwin.modular.core.util.I18nUtil;
import com.sap.me.nonconformance.NcGroupFullConfiguration;
import java.io.InputStream;
import java.util.Map;
public class NCGroupHandler extends BaseHandler {
@Override
public String importFile(String site, InputStream inputStream, String fileType, String mode) throws Exception {
int row = 0;
StringBuffer buffer = new StringBuffer();
Integer[] failedNumber = new Integer[]{0};
try {
FileReader fileReader = new FileReaderBuilder().build(fileType);
RowVisitor<JSONObject> visitor = getRowVisitor(site, mode, buffer, failedNumber);
row = fileReader.visitor(visitor).read(inputStream, getHeaders());
} catch (Exception e) {
buffer.append(e.getMessage() + "\n");
}
if (buffer.length() > 0) {
buffer.insert(0, I18nUtil.getI18nText("MaterData.import.Summary", new Object[]{row + failedNumber[0], row, failedNumber[0]}) + "\n");
throw BusinessException.build(buffer.toString());
}
buffer.insert(0, I18nUtil.getI18nText("MaterData.import.Summary", new Object[]{row + failedNumber[0], row, failedNumber[0]}) + "\n");
return buffer.toString();
}
@Override
public Map<String, String> getHeaders() {
return MasterObjectDefine.getHeadsMapping("NC_GROUP");
}
public RowVisitor<JSONObject> getRowVisitor(String site, String mode, StringBuffer buffer, Integer[] failedNumber) {
return new RowVisitor<JSONObject>() {
@Override
public int visit(long index, JSONObject jsonObject) {
Object[] params = new Object[10];
params[0] = index;
params[1] = jsonObject.getString("ncGroup");
boolean insert = false;
String resultMessage = null;
try {
if (jsonObject.containsKey("ncGroup") && jsonObject.getString("ncGroup").trim().length() > 0) {
jsonObject.put("site", site);
NcGroupFullConfiguration ncGroupFull = NcGroupWSClient.find(jsonObject);
if (ncGroupFull == null) {
if (AppUtil.canInsert(mode)) {
insert = true;
NcGroupWSClient.create(jsonObject);
}else if(AppUtil.canUpdate(mode)) {
resultMessage = ("第" + index + "行:" + I18nUtil.getI18nText("MaterData.import.update.fail", params) + "\n");
}
} else {
if (AppUtil.canUpdate(mode)) {
NcGroupWSClient.update(jsonObject, ncGroupFull);
}
}
if (resultMessage != null) {
params[2] = resultMessage;
failedNumber[0]++;
buffer.append("第" + index + "行:" + I18nUtil.getI18nText("MaterData.import.update.fail", params) + "\n");
return 0;
}
}
return 0;
} catch (Exception e) {
params[2] = e.getMessage();
failedNumber[0]++;
if (insert) {
buffer.append("第" + index + "行:" + I18nUtil.getI18nText("MaterData.import.insert.fail", params) + "\n");
} else {
buffer.append("第" + index + "行:" + I18nUtil.getI18nText("MaterData.import.update.fail", params) + "\n");
}
}
return 0;
}
@Override
public String[] getHeader() {
return null;
}
};
}
}

@ -0,0 +1,91 @@
package com.foreverwin.mesnac.dataimport.handler;
import com.alibaba.fastjson.JSONObject;
import com.foreverwin.mesnac.dataimport.client.ResourceTypeWSClient;
import com.foreverwin.mesnac.dataimport.handler.base.BaseHandler;
import com.foreverwin.mesnac.dataimport.reader.FileReader;
import com.foreverwin.mesnac.dataimport.reader.FileReaderBuilder;
import com.foreverwin.mesnac.dataimport.reader.RowVisitor;
import com.foreverwin.mesnac.dataimport.service.MasterObjectDefine;
import com.foreverwin.modular.core.exception.BusinessException;
import com.foreverwin.modular.core.util.I18nUtil;
import com.sap.me.plant.ResourceTypeBasicConfiguration;
import java.io.InputStream;
import java.util.Collection;
import java.util.Map;
public class ResourceTypeHandler extends BaseHandler {
@Override
public String importFile(String site, InputStream inputStream, String fileType, String mode) throws Exception {
int row = 0;
StringBuffer buffer = new StringBuffer();
Integer[] failedNumber = new Integer[]{0};
try {
FileReader fileReader = new FileReaderBuilder().build(fileType);
RowVisitor<JSONObject> visitor = getRowVisitor(site, mode, buffer, failedNumber);
row = fileReader.visitor(visitor).read(inputStream, getHeaders());
} catch (Exception e) {
buffer.append(e.getMessage() + "\n");
}
if (buffer.length() > 0) {
buffer.insert(0, I18nUtil.getI18nText("MaterData.import.Summary", new Object[]{row + failedNumber[0], row, failedNumber[0]}) + "\n");
throw BusinessException.build(buffer.toString());
}
buffer.insert(0, I18nUtil.getI18nText("MaterData.import.Summary", new Object[]{row + failedNumber[0], row, failedNumber[0]}) + "\n");
return buffer.toString();
}
@Override
public Map<String, String> getHeaders() {
return MasterObjectDefine.getHeadsMapping("RESOURCE_TYPE");
}
public RowVisitor<JSONObject> getRowVisitor(String site, String mode, StringBuffer buffer, Integer[] failedNumber) {
return new RowVisitor<JSONObject>() {
@Override
public int visit(long index, JSONObject jsonObject) {
Object[] params = new Object[10];
params[0] = index;
params[1] = jsonObject.getString("resourceType");
String resultMessage = null;
try {
if (jsonObject.containsKey("resourceType") && jsonObject.getString("resourceType").trim().length() > 0) {
jsonObject.put("site", site);
Collection<ResourceTypeBasicConfiguration> collection = ResourceTypeWSClient.find(jsonObject);
if (collection.size() > 0) {
resultMessage = "资源类型主数据已经存在";
} else {
ResourceTypeWSClient.insert(jsonObject);
}
if (resultMessage != null) {
params[2] = resultMessage;
failedNumber[0]++;
buffer.append("第" + index + "行:" + I18nUtil.getI18nText("MaterData.import.insert.fail", params) + "\n");
return 0;
}
}
return 0;
} catch (Exception e) {
params[2] = e.getMessage();
failedNumber[0]++;
buffer.append("第" + index + "行:" + I18nUtil.getI18nText("MaterData.import.insert.fail", params) + "\n");
}
return 0;
}
@Override
public String[] getHeader() {
return null;
}
};
}
}

@ -4,6 +4,10 @@ import java.util.HashMap;
import java.util.Map;
/**
*
*
*/
public class MasterObjectDefine {
private static Map<String,String> cvsHeadsMapping = null;
@ -11,22 +15,43 @@ public class MasterObjectDefine {
public static Map<String,String> getHeadsMapping(String objectType){
switch (objectType){
//资源主数据
//物料
case "ITEM":
cvsHeadsMapping = new HashMap<>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("item","物料编码");
cvsHeadsMapping.put("lotSize","批次大小");
cvsHeadsMapping.put("perMeter","自定义-PER_METER");
cvsHeadsMapping.put("perSquareMeter","自定义-PER_SQUARE_METER");
break;
//资源类型
case "RESOURCE_TYPE":
cvsHeadsMapping = new HashMap();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("resourceType","*设备(资源)类型命名(英文)");
cvsHeadsMapping.put("description","描述");
break;
//资源主数据
case "RESOURCE":
cvsHeadsMapping = new HashMap();
cvsHeadsMapping = new HashMap();
cvsHeadsMapping.put("seqNum", "序号");
cvsHeadsMapping.put("resource", "资源编码");
cvsHeadsMapping.put("description", "资源描述");
cvsHeadsMapping.put("defaultOperation", "默认操作");
cvsHeadsMapping.put("status", "资源状态" );
cvsHeadsMapping.put("setupStatus", "设置状态");
cvsHeadsMapping.put("processResource", "工艺资源");
cvsHeadsMapping.put("resourceType", "资源类型");
cvsHeadsMapping.put("validFrom", "资源有效期从");
cvsHeadsMapping.put("validTo", "资源有效期到");
cvsHeadsMapping.put("certificate", "证明编号");
break;
cvsHeadsMapping.put("seqNum", "序号");
cvsHeadsMapping.put("resource", "资源编码");
cvsHeadsMapping.put("description", "资源描述");
cvsHeadsMapping.put("defaultOperation", "默认操作");
cvsHeadsMapping.put("status", "资源状态" );
cvsHeadsMapping.put("setupStatus", "设置状态");
cvsHeadsMapping.put("processResource", "工艺资源");
cvsHeadsMapping.put("resourceType", "资源类型");
cvsHeadsMapping.put("validFrom", "资源有效期从");
cvsHeadsMapping.put("validTo", "资源有效期到");
cvsHeadsMapping.put("certificate", "证明编号");
break;
//工作中心主数据
case "WORK_CENTER":
@ -48,7 +73,7 @@ public class MasterObjectDefine {
break;
//工序主数据
case "OPERATION":
case "OPERATION":
cvsHeadsMapping = new HashMap();
cvsHeadsMapping.put("seqNum","序号");
@ -61,345 +86,67 @@ public class MasterObjectDefine {
cvsHeadsMapping.put("operationType", "操作类型");
cvsHeadsMapping.put("resourceType", "资源类型");
cvsHeadsMapping.put("defaultResource", "默认资源");
break;
case "PRODUCTION":
cvsHeadsMapping=new HashMap<String,String>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("id","*产线名称(英文)");
cvsHeadsMapping.put("descZH","产线描述(中文)");
cvsHeadsMapping.put("descEN","产线描述(英文)");
cvsHeadsMapping.put("wcCategory","工作中心类别(线/区域)");
cvsHeadsMapping.put("wcType","工作中心类型(生产/转移)");
cvsHeadsMapping.put("memberType","子工作中心类型");
cvsHeadsMapping.put("memberSeq","序列号");
cvsHeadsMapping.put("memberGBO","工作中心或资源");
break;
case "RESOURCE_TYPE":
cvsHeadsMapping=new HashMap<String,String>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("id","*设备(资源)类型命名(英文)");
cvsHeadsMapping.put("desc","描述");
break;
case "ROUTER":
cvsHeadsMapping=new HashMap<String,String>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("id","工艺路线名称(英文)");
cvsHeadsMapping.put("ver","版本");
cvsHeadsMapping.put("desc","工艺路线描述");
cvsHeadsMapping.put("routerType","工艺路线类型" );
cvsHeadsMapping.put("status","状态" );
cvsHeadsMapping.put("currentVer","当前版本");
cvsHeadsMapping.put("step","工艺步骤");
cvsHeadsMapping.put("setpOper","关键工序");
cvsHeadsMapping.put("processTime","处理时间");
break;
case "ITEM":
cvsHeadsMapping=new HashMap<String,String>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("id","物料编码");
cvsHeadsMapping.put("descZH","物料描述");
//计量单位
break;
case "ITEM_GROUP":
cvsHeadsMapping=new HashMap<String,String>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("id","*物料组名称");
cvsHeadsMapping.put("desc","*物料组描述");
cvsHeadsMapping.put("item","物料");
cvsHeadsMapping.put("itemVer","物料版本" );
break;
case "BOM":
cvsHeadsMapping=new HashMap<String,String>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("id","BOM名称");
cvsHeadsMapping.put("ver","BOM版本");
cvsHeadsMapping.put("desc","BOM描述");
cvsHeadsMapping.put("currentVer","当前版本");
cvsHeadsMapping.put("status","状态");
cvsHeadsMapping.put("item","*组件物料");
cvsHeadsMapping.put("itemVer","*组件物料版本");
cvsHeadsMapping.put("alternate","替代料");
cvsHeadsMapping.put("alternateVer","替代料版本");
cvsHeadsMapping.put("assembleSEQ","*装配顺序");
cvsHeadsMapping.put("assembleOper","*装配关键工序");
cvsHeadsMapping.put("assembleDataType","装配数据类型");
cvsHeadsMapping.put("assembleQty","装配数量");
cvsHeadsMapping.put("refDes","参考点");
cvsHeadsMapping.put("virtualItem","是否虚拟件");
break;
case "NC_GROUP":
break;
cvsHeadsMapping=new HashMap<String,String>();
//不合格代码组
case "NC_GROUP":
cvsHeadsMapping = new HashMap<>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("id","*不合格组名称(英文)");
cvsHeadsMapping.put("desc","不合格组描述");
cvsHeadsMapping.put("ncGroup","*不合格组名称(英文)");
cvsHeadsMapping.put("description","不合格组描述");
cvsHeadsMapping.put("applyAll","用于所有操作");
cvsHeadsMapping.put("applyOper","不合格组分配的操作");
break;
cvsHeadsMapping.put("applyOperation","不合格组分配的操作");
break;
case "NC_CODE":
cvsHeadsMapping=new HashMap<String,String>();
//不合格代码
case "NC_CODE":
cvsHeadsMapping = new HashMap<>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("groupId","*不合格代码组名称(英文)");
cvsHeadsMapping.put("id","*不合格代码(英文)");
cvsHeadsMapping.put("ncGroup","*不合格代码组名称(英文)");
cvsHeadsMapping.put("ncCode","*不合格代码(英文)");
cvsHeadsMapping.put("descZH","不合格代码描述(中文)");
cvsHeadsMapping.put("descEN","不合格代码描述(英文)");
cvsHeadsMapping.put("category","不合格类别");
cvsHeadsMapping.put("dataType","不合格数据类型");
cvsHeadsMapping.put("dispositionRouter","处置工艺路线");
cvsHeadsMapping.put("canBePrimaryCode","是否可以是主要代码");
cvsHeadsMapping.put("closure_required","是否需要关闭");
cvsHeadsMapping.put("auto_close_primary","自动关闭主NC");
cvsHeadsMapping.put("auto_close_incident","自动关闭事故");
cvsHeadsMapping.put("secondary_reqd_for_close","需要次级代码关闭");
cvsHeadsMapping.put("secondary_code","次要不良项");
cvsHeadsMapping.put("max_nc_limit","NC限制最大值");
cvsHeadsMapping.put("disp_operation","有效操作");
cvsHeadsMapping.put("disposition_group","处置组");
cvsHeadsMapping.put("disposition_group_status","处置组状态");
break;
case "INVENTORY":
cvsHeadsMapping=new HashMap<String,String>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("id","*库存标识");
cvsHeadsMapping.put("item","*物料名称");
cvsHeadsMapping.put("itemVer","*物料版本");
cvsHeadsMapping.put("qty","库存数量");
cvsHeadsMapping.put("shoporder","工单号");
cvsHeadsMapping.put("closureRequired","是否需要关闭");
cvsHeadsMapping.put("autoClosePrimary","自动关闭主NC");
cvsHeadsMapping.put("autoCloseIncident","自动关闭事故");
cvsHeadsMapping.put("secondaryRequireForClose","需要次级代码关闭");
cvsHeadsMapping.put("secondaryCode","次要不良项");
cvsHeadsMapping.put("maxNcLimit","NC限制最大值");
cvsHeadsMapping.put("dispositionOperation","有效操作");
cvsHeadsMapping.put("dispositionGroup","处置组");
cvsHeadsMapping.put("dispositionGroupStatus","处置组状态");
break;
//消息类型
case "MESSAGE_TYPE":
cvsHeadsMapping = new HashMap<>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("seqNum","消息类型");
cvsHeadsMapping.put("seqNum","消息正文");
cvsHeadsMapping.put("seqNum","响应用户组");
cvsHeadsMapping.put("seqNum","响应用户组");
cvsHeadsMapping.put("seqNum","响应时间(H)");
cvsHeadsMapping.put("seqNum","响应超期上报用户组");
cvsHeadsMapping.put("seqNum","出具方案时间(H)");
cvsHeadsMapping.put("seqNum","方案关闭时通知用户组");
cvsHeadsMapping.put("seqNum","纠正预防措施用户组");
cvsHeadsMapping.put("seqNum","纠正预防措施时间");
break;
break;
case "SHOP_ORDER":
cvsHeadsMapping=new HashMap<String,String>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("id","工单号");
cvsHeadsMapping.put("status","工单类型");
cvsHeadsMapping.put("item","计划物料");
cvsHeadsMapping.put("qty","工单数量");
cvsHeadsMapping.put("planStart","计划开始时间");
cvsHeadsMapping.put("planComplete","计划结束时间");
break;
case "USER":
cvsHeadsMapping=new HashMap<String,String>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("id","登录ID");
cvsHeadsMapping.put("password","密码");
cvsHeadsMapping.put("status","状态");
cvsHeadsMapping.put("firstname","名");
cvsHeadsMapping.put("lastname","姓");
cvsHeadsMapping.put("email","邮件");
cvsHeadsMapping.put("phone","电话");
cvsHeadsMapping.put("defaultSite","ME站点");
cvsHeadsMapping.put("defaultGroups","ME用户组");
cvsHeadsMapping.put("extRole","额外角色");
cvsHeadsMapping.put("cellphone","手机");
break;
case "STORAGE_BIN":
cvsHeadsMapping=new HashMap<String,String>();
cvsHeadsMapping.put("seqNum","序号");
cvsHeadsMapping.put("name","库位编码");
cvsHeadsMapping.put("description","库位描述");
cvsHeadsMapping.put("user","责任人");
cvsHeadsMapping.put("status","库位状态");
cvsHeadsMapping.put("fifo","是否先进先出控制");
cvsHeadsMapping.put("storageLocBo","存储地点编码");
break;
case "LABEL_CHECK_DETAIL":
cvsHeadsMapping=new HashMap<String,String>();
cvsHeadsMapping.put("checkPeriod","盘点周期");
cvsHeadsMapping.put("storageLocBo","库存地点");
cvsHeadsMapping.put("storageBinBo","库位");
cvsHeadsMapping.put("itemcode","物料");
cvsHeadsMapping.put("itemdescr","物料描述");
cvsHeadsMapping.put("unit","计量单位");
cvsHeadsMapping.put("labelSn","物料标签/SN");
cvsHeadsMapping.put("meQty","ME数量");
cvsHeadsMapping.put("meActualQty","ME实盘数量");
cvsHeadsMapping.put("meDiffQty","ME差异数量");
break;
case "Z_EXPORT_TEMPLATE":
cvsHeadsMapping=new HashMap<String,String>();
cvsHeadsMapping.put("workCenterBo","生产线");
cvsHeadsMapping.put("workCenterDescr","生产线描述");
cvsHeadsMapping.put("itemBo","零件号");
cvsHeadsMapping.put("itemDescr","零件号描述");
cvsHeadsMapping.put("customerId","客户件号");
cvsHeadsMapping.put("processidBo","工艺号");
cvsHeadsMapping.put("isValid","是否有效");
break;
case "Z_WORKSHOP_ORGANIZATION":
cvsHeadsMapping=new HashMap<String,String>();
cvsHeadsMapping.put("name","组织代码");
cvsHeadsMapping.put("description","组织描述");
cvsHeadsMapping.put("level","层次");
cvsHeadsMapping.put("leaderCode","组织领导工号");
cvsHeadsMapping.put("leaderName","组织领导姓名");
cvsHeadsMapping.put("parentBo","父组织代码");
cvsHeadsMapping.put("parentName","父组织描述");
cvsHeadsMapping.put("isDispatch","是否派工");
break;
case "PROCESS_INSPECTION_PLAN":
cvsHeadsMapping = new HashMap<>();
cvsHeadsMapping.put("site", "工厂");
cvsHeadsMapping.put("projectVersion","检验计划版本");
cvsHeadsMapping.put("item","物料");
cvsHeadsMapping.put("customerPartNo", "客户件号");
cvsHeadsMapping.put("operation","工序");
cvsHeadsMapping.put("productionVersionCategory", "生产版本类别");
cvsHeadsMapping.put("code", "检验项目编码");
cvsHeadsMapping.put("codeDescription", "检验项目描述");
cvsHeadsMapping.put("detail","检验项目明细");
cvsHeadsMapping.put("methodCode","检验方法编码");
cvsHeadsMapping.put("methodCodeDescription", "检验方法描述");
cvsHeadsMapping.put("frequency","频次");
cvsHeadsMapping.put("specialCharacteristicGrade", "特殊特性等级");
cvsHeadsMapping.put("judgmentCriteria", "判定标准");
cvsHeadsMapping.put("category", "检验类型");
cvsHeadsMapping.put("status","状态");
cvsHeadsMapping.put("judgmentMode","判定方式");
cvsHeadsMapping.put("parameterType", "参数类型");
cvsHeadsMapping.put("upperControlLineValue","上控制线值");
cvsHeadsMapping.put("upperLimit", "上限值");
cvsHeadsMapping.put("lowerLimit", "下限值");
cvsHeadsMapping.put("lowerControlLineValue", "下控制线值");
cvsHeadsMapping.put("targetValue","目标值");
cvsHeadsMapping.put("unit","单位");
cvsHeadsMapping.put("detailSeq","检验项目明细顺序号");
break;
case "PROCESS_POINT_INSPECTION":
cvsHeadsMapping = new HashMap<>();
cvsHeadsMapping.put("isSurface","*产线类型");
cvsHeadsMapping.put("productionLine","产线编号");
cvsHeadsMapping.put("productionLineDescription","产线描述");
cvsHeadsMapping.put("item","零件编号");
cvsHeadsMapping.put("itemDescription","零件描述");
cvsHeadsMapping.put("productionVersion","*生产版本类型");
cvsHeadsMapping.put("operation","工序编号");
cvsHeadsMapping.put("operationDescription","工序描述");
cvsHeadsMapping.put("status","是否有效");
cvsHeadsMapping.put("checkNumber","*点检编号");
cvsHeadsMapping.put("checkProject","*点检项目");
cvsHeadsMapping.put("dataType","数据类型");
cvsHeadsMapping.put("maxIndex","上限指标");
cvsHeadsMapping.put("minIndex","下限指标");
cvsHeadsMapping.put("targetIndex","目标指标");
cvsHeadsMapping.put("pointInspection","点检频次");
default:
break;
case "POKA_YOKE_POINT_INSPECTION":
cvsHeadsMapping = new HashMap<>();
cvsHeadsMapping.put("productionLine","*产线编号");
cvsHeadsMapping.put("productionLineDescription","产线描述");
cvsHeadsMapping.put("item","零件编号");
cvsHeadsMapping.put("itemDescription","零件描述");
cvsHeadsMapping.put("pokaYokeNo","*防错装置编号");
cvsHeadsMapping.put("pokaYokeName","*防错装置名称");
cvsHeadsMapping.put("status","是否有效");
cvsHeadsMapping.put("checkNumber","*点检编号");
cvsHeadsMapping.put("checkProject","*点检项目");
cvsHeadsMapping.put("userMethod","*操作方法");
cvsHeadsMapping.put("dataType","数据类型");
cvsHeadsMapping.put("maxIndex","上限指标");
cvsHeadsMapping.put("minIndex","下限指标");
cvsHeadsMapping.put("targetIndex","目标指标");
cvsHeadsMapping.put("pointInspection","点检频次");
break;
case "SHOP_ORDER_SMELTING_FORMULA":
cvsHeadsMapping = new HashMap<>();
cvsHeadsMapping.put("code","*序号");
cvsHeadsMapping.put("shopOrder","*工单号");
cvsHeadsMapping.put("smeltingNo","*炉次号");
cvsHeadsMapping.put("item","*物料号");
cvsHeadsMapping.put("plannedQty","*计划需求量");
break;
case "FF_DISPATCHER":
cvsHeadsMapping = new HashMap<>();
cvsHeadsMapping.put("site","工厂代码");
cvsHeadsMapping.put("workCenter","产线");
cvsHeadsMapping.put("operation","工序");
cvsHeadsMapping.put("storageLocation","小库位");
cvsHeadsMapping.put("dispatchingBo","点位");
cvsHeadsMapping.put("description","点位名称");
break;
case "MANUAL_LINE_WORK_TABEL_ARRANGEMENT":
cvsHeadsMapping = new HashMap<>();
cvsHeadsMapping.put("shopOrder","工单号");
cvsHeadsMapping.put("workbenchLine","工作台编码");
break;
case "SECONDMENT_WORKING_HOUR":
cvsHeadsMapping = new HashMap<>();
cvsHeadsMapping.put("secondmentDate","借调年月");
cvsHeadsMapping.put("sourceSite","来源工厂编号");
cvsHeadsMapping.put("sourceSiteName","来源工厂名称");
cvsHeadsMapping.put("userId","员工编号");
cvsHeadsMapping.put("jobTitle","职务性质");
cvsHeadsMapping.put("secondmentHour","借调工时");
break;
case "FF_SCADA_ANOMAL":
cvsHeadsMapping = new HashMap<>();
cvsHeadsMapping.put("site","站点");
cvsHeadsMapping.put("equipmentNo","设备号");
cvsHeadsMapping.put("equipmentName","设备名称");
cvsHeadsMapping.put("alarmNo","报警代码");
cvsHeadsMapping.put("alarmName","报警点位名称");
cvsHeadsMapping.put("abnormalClass","大类");
cvsHeadsMapping.put("abnormalSubclass","小类");
cvsHeadsMapping.put("shutdown","是否停机");
break;
case "FF_ASSEMBLY_AUTOMATION_ITEM":
cvsHeadsMapping = new HashMap<>();
cvsHeadsMapping.put("site","站点");
cvsHeadsMapping.put("productionLine","产线");
cvsHeadsMapping.put("item","产线物料");
cvsHeadsMapping.put("operation","工序");
cvsHeadsMapping.put("componentItem","组件物料");
cvsHeadsMapping.put("locationCode","配送点位");
cvsHeadsMapping.put("replenishmentPoint","补货点");
cvsHeadsMapping.put("operatingMode","运行方式");
default:
break;
}
return cvsHeadsMapping;
return cvsHeadsMapping;
}
}

@ -1,5 +1,6 @@
package com.foreverwin.mesnac.dispatch.controller;
import com.foreverwin.modular.core.exception.BusinessException;
import com.foreverwin.modular.core.util.R;
import com.foreverwin.modular.core.util.FrontPage;
import com.foreverwin.modular.core.util.CommonMethods;
@ -25,17 +26,6 @@ public class CallItemController {
@Autowired
public CallItemService callItemService;
/**
* id
*
* @param id
* @return
*/
@ResponseBody
@GetMapping("/{id:.+}")
public R getCallItemById(@PathVariable String id) {
return R.ok( callItemService.getById(id));
}
/**
*
@ -43,91 +33,53 @@ public class CallItemController {
* @return
*/
@ResponseBody
@GetMapping("")
public R getCallItemList(CallItem callItem){
@PostMapping("/findCallItemList")
public R findCallItemList(@RequestBody CallItem callItem){
List<CallItem> result;
QueryWrapper<CallItem> queryWrapper = new QueryWrapper<>();
queryWrapper.setEntity(callItem);
result = callItemService.list(queryWrapper);
try {
callItem.setSite(CommonMethods.getSite());
result = callItemService.findCallItemList(callItem);
} catch (Exception e) {
return R.failed(e.getMessage());
}
return R.ok(result);
}
/**
*
*
* @param frontPage
* @return
*/
@ResponseBody
@GetMapping("/page")
public R page(FrontPage<CallItem> frontPage, CallItem callItem){
IPage result;
QueryWrapper<CallItem> queryWrapper = new QueryWrapper<>();
queryWrapper.setEntity(callItem);
if (frontPage.getGlobalQuery() != null && !"".equals(frontPage.getGlobalQuery().trim())) {
//TODO modify global query
queryWrapper.lambda().and(wrapper -> wrapper
.like(CallItem::getHandle, frontPage.getGlobalQuery())
.or().like(CallItem::getSite, frontPage.getGlobalQuery())
.or().like(CallItem::getCallItemNo, frontPage.getGlobalQuery())
.or().like(CallItem::getShopOrder, frontPage.getGlobalQuery())
.or().like(CallItem::getSfc, frontPage.getGlobalQuery())
.or().like(CallItem::getSfcDispatchBo, frontPage.getGlobalQuery())
.or().like(CallItem::getOperation, frontPage.getGlobalQuery())
.or().like(CallItem::getStepId, frontPage.getGlobalQuery())
.or().like(CallItem::getResrce, frontPage.getGlobalQuery())
.or().like(CallItem::getComponentBo, frontPage.getGlobalQuery())
.or().like(CallItem::getCallType, frontPage.getGlobalQuery())
.or().like(CallItem::getStatus, frontPage.getGlobalQuery())
.or().like(CallItem::getCallStatus, frontPage.getGlobalQuery())
.or().like(CallItem::getIssueStatus, frontPage.getGlobalQuery())
.or().like(CallItem::getCreateUser, frontPage.getGlobalQuery())
.or().like(CallItem::getUpdateUser, frontPage.getGlobalQuery())
);
@PostMapping("/callItem")
public R callItem(@RequestBody List<CallItem> callItemList) {
try {
String site = CommonMethods.getSite();
String user = CommonMethods.getUser();
if (callItemList == null || callItemList.size() <= 0) {
throw BusinessException.build("请至少选择一笔记录");
}
callItemService.callItem(site, user, callItemList);
} catch (Exception e) {
return R.failed(e.getMessage());
}
result = callItemService.page(frontPage.getPagePlus(), queryWrapper);
return R.ok(result);
}
/**
*
* @param callItem
* @return null
*/
@PostMapping
public R save(@RequestBody CallItem callItem) {
return R.ok(callItemService.save(callItem));
return R.ok("叫料操作成功");
}
/**
*
* @param callItem
* @return null
*/
@PutMapping
public R updateById(@RequestBody CallItem callItem) {
return R.ok(callItemService.updateById(callItem));
}
/**
* id
* @param id ID
* @return 0 1
*/
@ResponseBody
@RequestMapping(method = RequestMethod.DELETE, value = "/{id:.+}")
public R removeById(@PathVariable("id") String id){
return R.ok(callItemService.removeById(id));
}
@PostMapping("/confirmReceive")
public R confirmReceive(@RequestBody List<CallItem> callItemList) {
try {
String site = CommonMethods.getSite();
String user = CommonMethods.getUser();
if (callItemList == null || callItemList.size() <= 0) {
throw BusinessException.build("请至少选择一笔记录");
}
callItemService.confirmReceive(site, user, callItemList);
} catch (Exception e) {
return R.failed(e.getMessage());
}
/**
*
* @param ids ID
* @return 0 1
*/
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/delete-batch")
public R removeByIds(List<String> ids){
return R.ok(callItemService.removeByIds(ids));
return R.ok("确认到料操作成功");
}
}

@ -4,8 +4,10 @@ import com.foreverwin.mesnac.common.dto.SfcDispatchDto;
import com.foreverwin.mesnac.dispatch.model.CallItem;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.foreverwin.mesnac.dispatch.model.SfcDispatch;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
/**
@ -33,4 +35,29 @@ public interface CallItemMapper extends BaseMapper<CallItem> {
* @return
*/
List<CallItem> selectDispatchCallItem(List<SfcDispatchDto> list);
/**
*
*
* @param sfcDispatchBo
* @return
*/
List<CallItem> selectCallItemAndType(@Param("sfcDispatchBo") String sfcDispatchBo);
/**
*
*
* @param callItem
*/
List<CallItem> findCallItemList(CallItem callItem);
/**
*
*
* @param status
* @param user
* @param dateTime
* @param list
*/
void updateCallItemStatus(@Param("status") String status, @Param("user") String user, @Param("dateTime") LocalDateTime dateTime, @Param("list") List<CallItem> list);
}

@ -6,6 +6,7 @@ import com.foreverwin.mesnac.dispatch.model.ShopOrderRelease;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
/**
@ -22,4 +23,19 @@ public interface SfcDispatchMapper extends BaseMapper<SfcDispatch> {
List<SfcDispatch> findSfcDispatch(@Param("site") String site, @Param("sfc") String sfc, @Param("operation") String operation, @Param("stepId") String stepId);
List<ShopOrderRelease> findSfcDispatchList(ShopOrderRelease shopOrderRelease);
/**
*
*
* @param site
* @param dispatchNo
* @param dispatchStatus
* @param modifyUser
* @param modifiedDateTime
*/
void updateSfcDispatchStatus(@Param("site") String site,
@Param("dispatchNo") String dispatchNo,
@Param("dispatchStatus") String dispatchStatus,
@Param("modifyUser") String modifyUser,
@Param("modifyDateTime") LocalDateTime modifiedDateTime);
}

@ -24,11 +24,5 @@ public interface UserResourceMapper extends BaseMapper<UserResource> {
List<UserResource> findEnableList(@Param("site") String site, @Param("resource") String resource, @Param("user") String user);
List<UserResourceDto> findAll(@Param("site") String site,
@Param("resource") String resource,
@Param("userId") String userId
);
List<UserResourceDto> findAll(@Param("site") String site, @Param("resource") String resource, @Param("userId") String userId);
}

@ -22,10 +22,9 @@ import com.baomidou.mybatisplus.annotation.IdType;
*/
@TableName("Z_CALL_ITEM")
public class CallItem extends Model<CallItem> {
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L;
/**
*
@ -134,19 +133,31 @@ public class CallItem extends Model<CallItem> {
private LocalDateTime updatedDateTime;
@TableField(exist = false)
private String item;
@TableField(exist = false)
private String itemDescription;
@TableField(exist = false)
private String materialType;
@TableField(exist = false)
private String dispatchStatus;
@TableField(exist = false)
private String workOrder;
@TableField(exist = false)
private String resourceType;
private String workCenter;
@TableField(exist = false)
private String blankingSize;
private String dispatchNo;
@TableField(exist = false)
private BigDecimal dispatchQty;
@TableField(exist = false)
private String itemDescription;
private String resourceType;
@TableField(exist = false)
private String blankingSize;
@TableField(exist = false)
private String operationDescription;
@TableField(exist = false)
private LocalDateTime plannedStartDate;
@TableField(exist = false)
private String remark;
@ -318,6 +329,38 @@ public class CallItem extends Model<CallItem> {
this.updatedDateTime = updatedDateTime;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
public String getItemDescription() {
return itemDescription;
}
public void setItemDescription(String itemDescription) {
this.itemDescription = itemDescription;
}
public String getMaterialType() {
return materialType;
}
public void setMaterialType(String materialType) {
this.materialType = materialType;
}
public String getDispatchStatus() {
return dispatchStatus;
}
public void setDispatchStatus(String dispatchStatus) {
this.dispatchStatus = dispatchStatus;
}
public String getWorkOrder() {
return workOrder;
}
@ -326,20 +369,20 @@ public class CallItem extends Model<CallItem> {
this.workOrder = workOrder;
}
public String getResourceType() {
return resourceType;
public String getWorkCenter() {
return workCenter;
}
public void setResourceType(String resourceType) {
this.resourceType = resourceType;
public void setWorkCenter(String workCenter) {
this.workCenter = workCenter;
}
public String getBlankingSize() {
return blankingSize;
public String getDispatchNo() {
return dispatchNo;
}
public void setBlankingSize(String blankingSize) {
this.blankingSize = blankingSize;
public void setDispatchNo(String dispatchNo) {
this.dispatchNo = dispatchNo;
}
public BigDecimal getDispatchQty() {
@ -350,12 +393,20 @@ public class CallItem extends Model<CallItem> {
this.dispatchQty = dispatchQty;
}
public String getItemDescription() {
return itemDescription;
public String getResourceType() {
return resourceType;
}
public void setItemDescription(String itemDescription) {
this.itemDescription = itemDescription;
public void setResourceType(String resourceType) {
this.resourceType = resourceType;
}
public String getBlankingSize() {
return blankingSize;
}
public void setBlankingSize(String blankingSize) {
this.blankingSize = blankingSize;
}
public String getOperationDescription() {
@ -366,6 +417,14 @@ public class CallItem extends Model<CallItem> {
this.operationDescription = operationDescription;
}
public LocalDateTime getPlannedStartDate() {
return plannedStartDate;
}
public void setPlannedStartDate(LocalDateTime plannedStartDate) {
this.plannedStartDate = plannedStartDate;
}
public String getRemark() {
return remark;
}

@ -35,4 +35,30 @@ public interface CallItemService extends IService<CallItem> {
* @param sfcDispatchList
*/
void saveCallItem(String site, String user, List<SfcDispatchDto> sfcDispatchList);
/**
*
*
* @param callItem
*/
List<CallItem> findCallItemList(CallItem callItem);
/**
*
*
* @param site
* @param user
* @param callItemList
*/
void callItem(String site, String user, List<CallItem> callItemList);
/**
*
* ----
*
* @param site
* @param user
* @param callItemList
*/
void confirmReceive(String site, String user, List<CallItem> callItemList);
}

@ -18,7 +18,10 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
*
@ -123,4 +126,46 @@ public class CallItemServiceImpl extends ServiceImpl<CallItemMapper, CallItem> i
this.saveBatch(list);
}
}
@Override
public List<CallItem> findCallItemList(CallItem callItem) {
return callItemMapper.findCallItemList(callItem);
}
@Override
public void callItem(String site, String user, List<CallItem> callItemList) {
if (callItemList == null || callItemList.size() <= 0) {
return;
}
LocalDateTime dateTime = LocalDateTime.now();
callItemMapper.updateCallItemStatus(Constants.CALL_ITEM_STATUS_CALLED, user, dateTime, callItemList);
}
@Override
public void confirmReceive(String site, String user, List<CallItem> callItemList) {
if (callItemList == null || callItemList.size() <= 0) {
return;
}
for (CallItem callItem : callItemList) {
String sfcDispatchBo = callItem.getSfcDispatchBo();
List<CallItem> list = callItemMapper.selectCallItemAndType(sfcDispatchBo);
if (list == null || list.size() <= 0) {
continue;
}
for (CallItem callItem1 : list) {
String callType = callItem1.getCallType();
String materialType = callItem1.getMaterialType();
if (Constants.CALL_TYPE_MATERIAL.equals(callType) && "ROH".equals(materialType)) {
throw BusinessException.build("勾选的派工单包含原材料组件,不能触发确认到料");
}
}
}
LocalDateTime dateTime = LocalDateTime.now();
callItemMapper.updateCallItemStatus(Constants.CALL_ITEM_STATUS_ISSUED, user, dateTime, callItemList);
}
}

@ -5,6 +5,7 @@ import com.foreverwin.mesnac.common.constant.Constants;
import com.foreverwin.mesnac.common.dto.SfcDispatchDto;
import com.foreverwin.mesnac.common.enums.DispatchStatusEnum;
import com.foreverwin.mesnac.common.enums.HandleEnum;
import com.foreverwin.mesnac.common.service.SfcDispatchCommonService;
import com.foreverwin.mesnac.common.util.ExcelUtils;
import com.foreverwin.mesnac.common.util.StringUtil;
import com.foreverwin.mesnac.dispatch.model.ShopOrderRelease;
@ -42,7 +43,7 @@ import java.util.stream.Collectors;
*/
@Service("sfcDispatchService")
@Transactional(rollbackFor = Exception.class)
public class SfcDispatchServiceImpl extends ServiceImpl<SfcDispatchMapper, SfcDispatch> implements SfcDispatchService {
public class SfcDispatchServiceImpl extends ServiceImpl<SfcDispatchMapper, SfcDispatch> implements SfcDispatchService, SfcDispatchCommonService {
@Autowired
@ -404,4 +405,10 @@ public class SfcDispatchServiceImpl extends ServiceImpl<SfcDispatchMapper, SfcDi
return flag;
}
@Override
public void updateSfcDispatchStatus(String site, String user, String dispatchNo, String dispatchStatus) {
LocalDateTime nowDateTime = LocalDateTime.now();
sfcDispatchMapper.updateSfcDispatchStatus(site, dispatchNo, dispatchStatus, user, nowDateTime);
}
}

@ -24,14 +24,20 @@
<result column="CREATED_DATE_TIME" property="createdDateTime" />
<result column="UPDATE_USER" property="updateUser" />
<result column="UPDATED_DATE_TIME" property="updatedDateTime" />
</resultMap>
<resultMap id="FullResultMap" type="com.foreverwin.mesnac.dispatch.model.CallItem" extends="BaseResultMap">
<result column="ITEM" property="item" />
<result column="ITEM_DESCRIPTION" property="itemDescription" />
<result column="MATERIAL_TYPE" property="materialType" />
<result column="WORK_ORDER" property="workOrder" />
<result column="RESOURCE_TYPE" property="resourceType" />
<result column="WORK_CENTER" property="workCenter" />
<result column="DISPATCH_NO" property="dispatchNo" />
<result column="DISPATCH_QTY" property="dispatchQty" />
<result column="RESOURCE_TYPE" property="resourceType" />
<result column="BLANKING_SIZE" property="blankingSize" />
<result column="ITEM_DESCRIPTION" property="itemDescription" />
<result column="OPERATION_DESCRIPTION" property="operationDescription" />
<result column="PLANNED_START_DATE" property="plannedStartDate" />
<result column="REMARK" property="remark" />
</resultMap>
@ -606,17 +612,54 @@
</foreach>
</select>
<select id="findCallItemList" resultMap="">
SELECT ZCI.HANDLE, ZCI.SITE, CF.VALUE WORK_ORDER, ZSD.WORK_CENTER, ZSD.SHOP_ORDER, ZSD.SFC, ZSD.DISPATCH_NO, CP.ITEM, IT.DESCRIPTION ITEM_DESCRIPTION, ZSD.BLANKING_SIZE,
ZSD.DISPATCH_STATUS, ZCI.OPERATION, OPT.DESCRIPTION OPERATION_DESCRIPTION, ZSD.RESOURCE_TYPE, ZCI.RESRCE, ZSD.DISPATCH_QTY, ZSD.PLANNED_START_DATE, ZSD.REMARK
<select id="selectCallItemAndType" resultMap="FullResultMap">
SELECT ZCI.HANDLE, ZCI.SITE, ZCI.CALL_ITEM_NO, ZCI.SHOP_ORDER, ZCI.SFC, ZCI.SFC_DISPATCH_BO, ZCI.OPERATION, ZCI.STEP_ID, ZCI.RESRCE, ZCI.COMPONENT_BO, CP.MATERIAL_TYPE, ZCI.CALL_TYPE, ZCI.REQUIRED_QTY, ZCI.REQUIRED_DATE_TIME,
ZCI.ISSUE_QTY, ZCI.STATUS, ZCI.CALL_STATUS, ZCI.ISSUE_STATUS, ZCI.CREATE_USER, ZCI.CREATED_DATE_TIME, ZCI.UPDATE_USER, ZCI.UPDATED_DATE_TIME
FROM Z_CALL_ITEM ZCI
INNER JOIN ITEM CP ON CP.HANDLE = ZCI.COMPONENT_BO
WHERE ZCI.SFC_DISPATCH_BO = #{sfcDispatchBo}
</select>
<select id="findCallItemList" resultMap="FullResultMap">
SELECT ZCI.HANDLE, ZCI.SITE, CF.VALUE WORK_ORDER, ZSD.WORK_CENTER, ZSD.SHOP_ORDER, ZSD.SFC, ZSD.DISPATCH_NO, IT.ITEM, IT.DESCRIPTION ITEM_DESCRIPTION, ZSD.BLANKING_SIZE,
ZSD.STEP_ID, ZCI.SFC_DISPATCH_BO ,ZSD.DISPATCH_STATUS, ZCI.OPERATION, OPT.DESCRIPTION OPERATION_DESCRIPTION, ZSD.RESOURCE_TYPE, ZCI.RESRCE, ZSD.DISPATCH_QTY, ZSD.PLANNED_START_DATE, ZSD.REMARK
FROM Z_SFC_DISPATCH ZSD
INNER JOIN Z_CALL_ITEM ZCI ON ZCI.SFC_DISPATCH_BO = ZSD.HANDLE
INNER JOIN SHOP_ORDER SO ON SO.SITE = ZSD.SITE AND ZSD.SHOP_ORDER = SO.SHOP_ORDER
LEFT JOIN CUSTOM_FIELDS CF ON CF.HANDLE = SO.HANDLE AND CF.ATTRIBUTE = 'WORK_ORDER'
INNER JOIN ITEM CP ON CP.HANDLE = ZCI.COMPONENT_BO
LEFT JOIN ITEM_T IT ON IT.ITEM_BO = CP.HANDLE AND IT.LOCALE = 'zh'
INNER JOIN ITEM IT ON IT.HANDLE = SO.ITEM_BO
LEFT JOIN ITEM_T IT ON IT.ITEM_BO = IT.HANDLE AND IT.LOCALE = 'zh'
INNER JOIN OPERATION OP ON OP.SITE = ZCI.SITE AND OP.OPERATION = ZCI.OPERATION AND OP.CURRENT_REVISION = 'true'
LEFT JOIN OPERATION_T OPT ON OPT.OPERATION_BO = OP.HANDLE AND OPT.LOCALE = 'zh'
ORDER BY ZSD.SFC, ZSD.STEP_ID, ZCI.CALL_TYPE
WHERE ZSD.SITE = #{site}
<if test="workCenter != null and workCenter != ''">
AND ZSD.WORK_CENTER = #{workCenter}
</if>
<if test="dispatchStatus != null and dispatchStatus != ''">
AND ZSD.DISPATCH_STATUS = #{dispatchStatus}
</if>
<if test="workOrder != null and workOrder != ''">
AND CF.VALUE LIKE '%' ||#{workOrder}|| '%'
</if>
<if test="shopOrder != null and shopOrder != ''">
AND SO.SHOP_ORDER = #{shopOrder}
</if>
<if test="resourceType != null and resourceType != ''">
AND ZSD.RESOURCE_TYPE = #{resourceType}
</if>
<if test="resrce != null and resrce != ''">
AND ZCI.RESRCE = #{resrce}
</if>
GROUP BY ZCI.HANDLE, ZCI.SITE, CF.VALUE, ZSD.WORK_CENTER, ZSD.SHOP_ORDER, ZSD.SFC, ZSD.DISPATCH_NO, IT.ITEM, IT.DESCRIPTION, ZSD.BLANKING_SIZE,
ZSD.STEP_ID, ZCI.SFC_DISPATCH_BO ,ZSD.DISPATCH_STATUS, ZCI.OPERATION, OPT.DESCRIPTION, ZSD.RESOURCE_TYPE, ZCI.RESRCE, ZSD.DISPATCH_QTY, ZSD.PLANNED_START_DATE, ZSD.REMARK
ORDER BY ZSD.SFC, ZSD.STEP_ID
</select>
<update id="updateCallItemStatus">
UPDATE Z_CALL_ITEM SET STATUS = #{status}, UPDATE_USER = #{user}, UPDATED_DATE_TIME = #{dateTime}
WHERE STATUS != '804' AND SFC_DISPATCH_BO IN
<foreach item="item" collection="list" separator="," open="(" close=")" index="">
#{item.sfcDispatchBo}
</foreach>
</update>
</mapper>

@ -977,7 +977,6 @@
</delete>
<!-- BaseMapper标准查询/修改/删除 -->
<select id="findSfcDispatch" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List" />
FROM Z_SFC_DISPATCH
@ -990,7 +989,6 @@
</if>
</select>
<select id="findSfcDispatchList" resultMap="FullResultMap">
SELECT WIP.*, CASE WHEN WIP.DISPATCH_SEQ = 1 THEN WIP.PLANNED_START_DATE ELSE V1.PLANNED_COMP_DATE END EARLIEST_START_DATE,
CASE WHEN V2.HANDLE IS NOT NULL THEN V2.PLANNED_START_DATE ELSE WIP.PLANNED_COMP_DATE END LATEST_END_DATE,
@ -1070,4 +1068,9 @@
LEFT JOIN Z_SFC_DISPATCH V2 ON V2.SITE = WIP.SITE AND V2.SFC = WIP.SFC AND V2.DISPATCH_SEQ = WIP.AFTER_SEQ
ORDER BY WIP.SFC, TO_NUMBER(WIP.DISPATCH_SEQ)
</select>
<update id="updateSfcDispatchStatus" >
UPDATE Z_SFC_DISPATCH SET DISPATCH_STATUS = #{dispatchStatus}, MODIFY_USER = #{modifyUser}, MODIFIED_DATE_TIME = #{modifiedDateTime}
WHERE SITE = #{site} AND DISPATCH_NO = #{dispatchNo}
</update>
</mapper>

@ -452,15 +452,6 @@
</foreach>)
</delete>
<!-- BaseMapper标准查询/修改/删除 -->
<select id="findEmployeeList" resultType="com.foreverwin.mesnac.meapi.model.NwaUser">
SELECT A.SITE, A.USER_ID USER_NAME, B.FIRST_NAME, B.LAST_NAME, B.FULL_NAME
FROM Z_USER_RESOURCE A
LEFT JOIN Z_NWA_USER B ON A.SITE = B.SITE AND A.USER_ID = B.USER_NAME
WHERE A.SITE = #{site} AND A.RESRCE = #{resource}
</select>
<select id="findEnableList" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"></include>
FROM Z_USER_RESOURCE

@ -33,6 +33,7 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
public WebServiceResponse bomSync(BomSyncRequest bomSyncRequest) {
WebServiceResponse response = new WebServiceResponse();
String site = null;
try {
if (bomSyncRequest == null) {
throw BusinessException.build("传递的参数格式不正确,或者为空");
@ -46,7 +47,7 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
response.setHANDLE(bomSyncRequest.getTRANID());
response.setSTATUS("S");
String site = bomSyncRequest.getSITE();
site = bomSyncRequest.getSITE();
String shopOrder = bomSyncRequest.getSHOP_ORDER();
if (StringUtil.isBlank(site)) {
throw BusinessException.build("参数【SITE】不能为空");
@ -56,6 +57,11 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
interfaceService.bomSync(site, bomSyncRequest);
response.setMESSAGE("工单【" + shopOrder + "】BOM数据同步成功");
} catch (Exception e) {
response.setSTATUS("E");
response.setMESSAGE(ExceptionUtil.getExceptionMsg(e));
} finally {
//记录接口日志
IntegrationLog log = new IntegrationLog();
log.setHandle(UUID.randomUUID().toString());
@ -71,9 +77,6 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
log.setRequestDateTime(LocalDateTime.parse(bomSyncRequest.getDATE_TIME(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
log.setCreatedDateTime(LocalDateTime.now());
integrationLogService.saveIntegrationLog(log);
} catch (Exception e) {
response.setSTATUS("E");
response.setMESSAGE(ExceptionUtil.getExceptionMsg(e));
}
//接口返回
@ -84,6 +87,7 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
public WebServiceResponse routerSync(RouterSyncRequest routerSyncRequest) {
WebServiceResponse response = new WebServiceResponse();
String site = null;
try {
if (routerSyncRequest == null) {
throw BusinessException.build("传递的参数格式不正确,或者为空");
@ -97,7 +101,7 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
response.setHANDLE(routerSyncRequest.getTRANID());
response.setSTATUS("S");
String site = routerSyncRequest.getSITE();
site = routerSyncRequest.getSITE();
String shopOrder = routerSyncRequest.getSHOP_ORDER();
if (StringUtil.isBlank(site)) {
throw BusinessException.build("站点参数不能为空");
@ -107,6 +111,11 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
interfaceService.routerSync(site, routerSyncRequest);
response.setMESSAGE("工单【" + shopOrder + "】工艺路线数据同步成功");
} catch (Exception e) {
response.setSTATUS("E");
response.setMESSAGE(ExceptionUtil.getExceptionMsg(e));
} finally {
//记录接口日志
IntegrationLog log = new IntegrationLog();
log.setHandle(UUID.randomUUID().toString());
@ -122,9 +131,6 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
log.setRequestDateTime(LocalDateTime.parse(routerSyncRequest.getDATE_TIME(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
log.setCreatedDateTime(LocalDateTime.now());
integrationLogService.saveIntegrationLog(log);
} catch (Exception e) {
response.setSTATUS("E");
response.setMESSAGE(ExceptionUtil.getExceptionMsg(e));
}
//接口返回
@ -135,6 +141,7 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
public WebServiceResponse shopOrderSync(ShopOrderSyncRequest shopOrderSyncRequest) {
WebServiceResponse response = new WebServiceResponse();
String site = null;
try {
if (shopOrderSyncRequest == null) {
throw BusinessException.build("传递的参数格式不正确,或者为空");
@ -149,7 +156,7 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
response.setSTATUS("S");
String site = shopOrderSyncRequest.getSITE();
site = shopOrderSyncRequest.getSITE();
String shopOrder = shopOrderSyncRequest.getSHOP_ORDER();
if (StringUtil.isBlank(site)) {
throw BusinessException.build("参数【SITE】不能为空");
@ -159,6 +166,11 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
interfaceService.shopOrderSync(site, shopOrderSyncRequest);
response.setMESSAGE("工单【" + shopOrder + "】同步成功");
} catch (Exception e) {
response.setSTATUS("E");
response.setMESSAGE(ExceptionUtil.getExceptionMsg(e));
} finally {
//记录接口日志
IntegrationLog log = new IntegrationLog();
log.setHandle(UUID.randomUUID().toString());
@ -174,9 +186,6 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
log.setRequestDateTime(LocalDateTime.parse(shopOrderSyncRequest.getDATE_TIME(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
log.setCreatedDateTime(LocalDateTime.now());
integrationLogService.saveIntegrationLog(log);
} catch (Exception e) {
response.setSTATUS("E");
response.setMESSAGE(ExceptionUtil.getExceptionMsg(e));
}
//接口返回
@ -187,6 +196,7 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
public WebServiceResponse itemBatchReceive(ItemBatchReceiveRequest itemBatchReceiveRequest) {
WebServiceResponse response = new WebServiceResponse();
String site = null;
try {
if (itemBatchReceiveRequest == null) {
throw BusinessException.build("传递的参数格式不正确,或者为空");
@ -201,7 +211,7 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
response.setSTATUS("S");
String site = itemBatchReceiveRequest.getSITE();
site = itemBatchReceiveRequest.getSITE();
String purchaseOrder = itemBatchReceiveRequest.getPURCHASE_ORDER();
if (StringUtil.isBlank(site)) {
throw BusinessException.build("参数【SITE】不能为空");
@ -211,6 +221,11 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
interfaceService.saveItemBatch(site, itemBatchReceiveRequest);
response.setMESSAGE("采购订单【" + purchaseOrder + "】的行项数据接收成功");
} catch (Exception e) {
response.setSTATUS("E");
response.setMESSAGE(ExceptionUtil.getExceptionMsg(e));
} finally {
//记录接口日志
IntegrationLog log = new IntegrationLog();
log.setHandle(UUID.randomUUID().toString());
@ -226,9 +241,6 @@ public class ERPAPIWebServiceImpl implements ERPAPIWebService {
log.setRequestDateTime(LocalDateTime.parse(itemBatchReceiveRequest.getDATE_TIME(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
log.setCreatedDateTime(LocalDateTime.now());
integrationLogService.saveIntegrationLog(log);
} catch (Exception e) {
response.setSTATUS("E");
response.setMESSAGE(ExceptionUtil.getExceptionMsg(e));
}
//接口返回

@ -1,6 +1,5 @@
package com.foreverwin.mesnac.integration.service.impl;
import com.baomidou.mybatisplus.extension.service.IService;
import com.foreverwin.mesnac.integration.model.IntegrationLog;
import com.foreverwin.mesnac.integration.mapper.IntegrationLogMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

@ -1,6 +1,5 @@
package com.foreverwin.mesnac.integration.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.foreverwin.mesnac.common.constant.Constants;
import com.foreverwin.mesnac.common.constant.CustomFieldConstant;
@ -20,6 +19,10 @@ import com.sap.me.common.ObjectReference;
import com.sap.me.common.ProcurementType;
import com.sap.me.demand.*;
import com.sap.me.productdefinition.*;
import com.sap.me.production.ChangeProductionContext;
import com.sap.me.production.ChangeProductionRequest;
import com.sap.me.production.ChangeProductionServiceInterface;
import com.sap.me.production.OperationPlacementTypeEnum;
import com.visiprise.globalization.DateGlobalizationServiceInterface;
import com.visiprise.globalization.GlobalizationService;
import com.visiprise.model.BOMType;
@ -48,6 +51,8 @@ public class InterfaceServiceImpl implements InterfaceService {
@Autowired
private BomService bomService;
@Autowired
private SfcService sfcService;
@Autowired
private ItemService itemService;
@Autowired
private RouterService routerService;
@ -56,6 +61,8 @@ public class InterfaceServiceImpl implements InterfaceService {
@Autowired
private ItemBatchService itemBatchService;
@Autowired
private OperationService operationService;
@Autowired
private CustomFieldsService customFieldsService;
@ -152,9 +159,12 @@ public class InterfaceServiceImpl implements InterfaceService {
public void bomSync(String site, BomSyncRequest bomSyncRequest) throws Exception {
//获取物料清单标准服务
BOMConfigurationServiceInterface bomConfigurationService = MEServices.create("com.sap.me.productdefinition", "BOMConfigurationService", site);
//获取更改生产标准服务
ChangeProductionServiceInterface changeProductionService = MEServices.create("com.sap.me.production", "ChangeProductionService", site);
//工单编号作为工艺路线编号
String bom = bomSyncRequest.getSHOP_ORDER();
String shopOrder = bomSyncRequest.getSHOP_ORDER();
String bom = shopOrder;
if (StringUtil.isBlank(bom)) {
throw BusinessException.build("工单编号不能为空");
}
@ -170,9 +180,11 @@ public class InterfaceServiceImpl implements InterfaceService {
}
bomComponentDtoList.sort((a,b) -> Float.compare(a.getSEQ().floatValue(), b.getSEQ().floatValue()));
Boolean isChange = false;
//查询工艺路线是否存在, 不存在版本默认为1.0,存在最大版本+1最为当前版本
Bom bomModel = bomService.getMaxRevisionBom(site, bom);
if (bomModel != null) {
isChange = true;
Float currentRevision = new Float(bomModel.getRevision());
revision = currentRevision + 1;
bomBo = HandleEnum.BOM.getHandle(site, bom, revision.toString(), BOMType._H);
@ -193,8 +205,20 @@ public class InterfaceServiceImpl implements InterfaceService {
//物料清单组件
for (int i = 0; i < bomComponentDtoList.size(); i++) {
BomComponentDto componentDto = bomComponentDtoList.get(i);
String componentGbo = HandleEnum.ITEM.getHandle(site, componentDto.getMATNR(), "*");
String operationBo = HandleEnum.OPERATION.getHandle(site, componentDto.getOPERATION(), "#");
String componentGbo = HandleEnum.ITEM.getHandle(site, componentDto.getMATNR(), "A");
/**
*
* 1.ERP
* 2.MES=_ERP
* 3.MES=MES
*/
String erpWorkCenter = componentDto.getOPERATION();
Operation operationModel = operationService.queryOperationByErpWorkCenter(site, erpWorkCenter);
if (operationModel == null) {
throw BusinessException.build("ERP工作中心【" +erpWorkCenter+"】对应的MES工序未维护");
}
String operationBo = operationModel.getHandle();
//BOMComponentConfiguration
BOMComponentConfiguration componentConfiguration = new BOMComponentConfiguration();
@ -217,15 +241,42 @@ public class InterfaceServiceImpl implements InterfaceService {
bomConfiguration.setBomComponentList(componentConfigurationList);
//物料清单保存
bomConfigurationService.createBOM(bomConfiguration);
//非BOM变更
if (!isChange) return;
//查询工单是否已下达,已下达则表示需要做变更
String shopOrderBo = HandleEnum.SHOP_ORDER.getHandle(site, shopOrder);
List<Sfc> sfcList = sfcService.getSfcListByShopOrderBo(shopOrderBo);
if (sfcList == null || sfcList.size() <= 0) {
return;
}
//如果工单已经开始生产,做更改生产操作
ChangeProductionRequest changeProductionRequest = new ChangeProductionRequest();
//变更内容
ChangeProductionContext changeProductionContext = new ChangeProductionContext();
changeProductionContext.setNewBom(bom);
changeProductionContext.setNewBomRevision(revision.toString());
changeProductionRequest.setChangeProductionContextType(changeProductionContext);
//变更注释
changeProductionRequest.setCommentsRequired(true);
changeProductionRequest.setComments("BOM变更更改生产");
changeProductionService.changeProduction(changeProductionRequest);
}
@Override
public void routerSync(String site, RouterSyncRequest routerSyncRequest) throws Exception {
//获取工艺路线标准服务
RouterConfigurationServiceInterface routerConfigurationService = MEServices.create("com.sap.me.productdefinition", "RouterConfigurationService", site);
//获取更改生产标准服务
ChangeProductionServiceInterface changeProductionService = MEServices.create("com.sap.me.production", "ChangeProductionService", site);
//工单编号作为工艺路线编号
String router = routerSyncRequest.getSHOP_ORDER();
String shopOrder = routerSyncRequest.getSHOP_ORDER();
String router = shopOrder;
if (StringUtil.isBlank(router)) {
throw BusinessException.build("工单编号不能为空");
}
@ -242,9 +293,11 @@ public class InterfaceServiceImpl implements InterfaceService {
String routerType = RouterType.SHOPORDER_SPECIFIC.value();
String routerBo = HandleEnum.ROUTER.getHandle(site, router, routerType, revision.toString());
Boolean isChange = false;
//查询工艺路线是否存在, 不存在版本默认为1.0,存在最大版本+1最为当前版本
Router routerModel = routerService.getMaxRevisionRouter(site, router);
if (routerModel != null) {
isChange = true;
Float currentRevision = new Float(routerModel.getRevision());
revision = currentRevision + 1;
routerBo = HandleEnum.ROUTER.getHandle(site, router, routerType, revision.toString());
@ -271,7 +324,6 @@ public class InterfaceServiceImpl implements InterfaceService {
for (int i = 0; i < routerStepDtoList.size(); i++) {
RouterStepDto routerStepDto = routerStepDtoList.get(i);
String stepId = routerStepDto.getSTEP_ID();
String operation = routerStepDto.getOPERATION();
if (StringUtil.isBlank(entryRouterStep)) {
entryRouterStep = stepId;
}
@ -283,6 +335,21 @@ public class InterfaceServiceImpl implements InterfaceService {
routerStepList.get(i-1).getRouterNextStepList().add(routerNextStep);
}
/**
*
* 1.ERP
* 2.MES=_ERP
* 3.MES=MES
*/
String erpWorkCenter = routerStepDto.getOPERATION();
Operation operationModel = operationService.queryOperationByErpWorkCenter(site, erpWorkCenter);
if (operationModel == null) {
throw BusinessException.build("ERP工作中心【" +erpWorkCenter+"】对应的MES工序未维护");
}
String operation = operationModel.getOperation();
String operationBo = operationModel.getHandle();
//工艺路线步骤
RouterStep routerStep = new RouterStep();
routerStep.setSequence(new BigDecimal(i+1));
@ -295,7 +362,6 @@ public class InterfaceServiceImpl implements InterfaceService {
RouterComponentContext routerComponentContext = new RouterComponentContext();
RouterOperation routerOperation = new RouterOperation();
//工艺路线步骤工序默认当前版本
String operationBo = HandleEnum.OPERATION.getHandle(site, operation, "#");
routerOperation.setOperationRef(operationBo);
routerOperation.setStepType(RouterStepType.NORMAL);
routerComponentContext.setRouterOperation(routerOperation);
@ -344,6 +410,33 @@ public class InterfaceServiceImpl implements InterfaceService {
if (customFieldsList != null && customFieldsList.size() > 0) {
customFieldsService.saveOrUpdateCustomFields(customFieldsList);
}
//非工艺路线变更
if (!isChange) return;
//查询工单是否已下达,已下达则表示需要做变更
String shopOrderBo = HandleEnum.SHOP_ORDER.getHandle(site, shopOrder);
List<Sfc> sfcList = sfcService.getSfcListByShopOrderBo(shopOrderBo);
if (sfcList == null || sfcList.size() <= 0) {
return;
}
//如果工单已经开始生产,做更改生产操作
ChangeProductionRequest changeProductionRequest = new ChangeProductionRequest();
//变更内容
ChangeProductionContext changeProductionContext = new ChangeProductionContext();
changeProductionContext.setNewRouter(router);
changeProductionContext.setNewRouterRevision(revision.toString());
changeProductionRequest.setChangeProductionContextType(changeProductionContext);
//选择车间作业控制的工艺路线操作位置
changeProductionRequest.setOperationPlacementType(OperationPlacementTypeEnum.CURRENT_OPERATION);
//变更注释
changeProductionRequest.setCommentsRequired(true);
changeProductionRequest.setComments("工艺路线变更,更改生产");
changeProductionService.changeProduction(changeProductionRequest);
}
@Override
@ -383,7 +476,9 @@ public class InterfaceServiceImpl implements InterfaceService {
//校验计划物料不能为空
String plannedItem = shopOrderSyncRequest.getPLANNED_ITEM();
String plannedBom = shopOrderSyncRequest.getPLANNED_BOM();
plannedBom = StringUtil.notBlank(plannedBom) ? plannedBom : shopOrder;
String plannedRouter = shopOrderSyncRequest.getPLANNED_ROUTER();
plannedRouter = StringUtil.notBlank(plannedRouter) ? plannedRouter : shopOrder;
//计划BOM类型默认为工单BOMH
String bomType = BomType.SHOPORDERBOM.value();
@ -520,9 +615,15 @@ public class InterfaceServiceImpl implements InterfaceService {
for (int i = 0; i < itemBatchDtoList.size(); i++) {
ItemBatchDto itemBatchDto = itemBatchDtoList.get(i);
String item = itemBatchDto.getITEM();
if (StringUtil.isBlank(item)) {
throw BusinessException.build("物料参数不能为空");
}
String spec = itemBatchDto.getSPEC();
String texture = itemBatchDto.getTEXTURE();
String batch = itemBatchDto.getBATCH();
if (StringUtil.isBlank(item)) {
throw BusinessException.build("批次号不能为空");
}
String supplier = itemBatchDto.getSUPPLIER();
//查询物料和批次是否已经存在记录

@ -25,4 +25,5 @@ public interface OperationMapper extends BaseMapper<Operation> {
Operation getCurrentRevisionRef(@Param("site") String site, @Param("operation") String operation);
Operation queryOperationByErpWorkCenter(@Param("site") String site, @Param("erpWorkCenter") String erpWorkCenter);
}

@ -28,4 +28,13 @@ public interface OperationService extends IService<Operation> {
List<Operation> selectList(Operation operation);
Operation getCurrentRevisionRef(String site, String operation);
/**
* ERPMES()
*
* @param site
* @param erpWorkCenter
* @return
*/
Operation queryOperationByErpWorkCenter(String site, String erpWorkCenter);
}

@ -56,5 +56,10 @@ public class OperationServiceImpl extends ServiceImpl<OperationMapper, Operation
return currentRevisionRef;
}
@Override
public Operation queryOperationByErpWorkCenter(String site, String erpWorkCenter) {
return operationMapper.queryOperationByErpWorkCenter(site, erpWorkCenter);
}
}

@ -615,4 +615,10 @@
AND OPERATION = #{operation}
AND CURRENT_REVISION = 'true'
</select>
<select id="queryOperationByErpWorkCenter" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List" />
FROM OPERATION
WHERE SITE = #{site} AND OPERATION LIKE '%_'||#{erpWorkCenter}
</select>
</mapper>

Loading…
Cancel
Save