|
|
package com.tml.materialPeptide;
|
|
|
|
|
|
import com.dassault_systemes.platform.restServices.RestService;
|
|
|
import jakarta.servlet.http.HttpServletRequest;
|
|
|
import jakarta.ws.rs.*;
|
|
|
import jakarta.ws.rs.core.Context;
|
|
|
import jakarta.ws.rs.core.MediaType;
|
|
|
import jakarta.ws.rs.core.Response;
|
|
|
import matrix.db.JPO;
|
|
|
import matrix.util.MatrixException;
|
|
|
import org.json.JSONArray;
|
|
|
import org.json.JSONObject;
|
|
|
|
|
|
import java.util.List;
|
|
|
import java.util.logging.Logger;
|
|
|
|
|
|
@Path("/materialPeptide")
|
|
|
public class DSMaintenancePeptideAttrController extends RestService {
|
|
|
|
|
|
private static final Logger LOGGER = Logger.getLogger(DSMaintenancePeptideAttrController.class.getName());
|
|
|
|
|
|
@GET
|
|
|
public Response getInfo(@Context HttpServletRequest request,
|
|
|
@QueryParam("partCode") String partCode) {
|
|
|
return this.getPartPeptideAttr(request, partCode);
|
|
|
}
|
|
|
|
|
|
@PUT
|
|
|
@Path("/updatePartInfo")
|
|
|
@Consumes(MediaType.APPLICATION_JSON)
|
|
|
public Response updatePartInfo(@Context HttpServletRequest request,
|
|
|
PartAttrDTO partAttrDTO) {
|
|
|
return this.updatePartAttr(request,partAttrDTO);
|
|
|
}
|
|
|
|
|
|
@PUT
|
|
|
@Path("/updateInfo")
|
|
|
@Consumes(MediaType.APPLICATION_JSON)
|
|
|
public Response updateInfo(@Context HttpServletRequest request,
|
|
|
PeptideUpdateRequest updateRequest) {
|
|
|
return this.updatePeptideAttrs(request, updateRequest);
|
|
|
}
|
|
|
|
|
|
private Response updatePartAttr(HttpServletRequest request, PartAttrDTO partAttrDTO) {
|
|
|
if(partAttrDTO == null || partAttrDTO.getPartId() == null) {
|
|
|
return Response.status(Response.Status.BAD_REQUEST).entity("Missing required properties").build();
|
|
|
}
|
|
|
|
|
|
matrix.db.Context context = this.getAuthenticatedContext(request, false);
|
|
|
String partId = partAttrDTO.getPartId();
|
|
|
|
|
|
StringBuilder updateInfoBuilder = new StringBuilder();
|
|
|
updateInfoBuilder.append("modify bus ").append(partId);
|
|
|
|
|
|
// 如果有规格型号属性,添加到更新字符串
|
|
|
if (partAttrDTO.getSpecification() != null) {
|
|
|
updateInfoBuilder.append(" ").append("specification").append(" ").append(partAttrDTO.getSpecification());
|
|
|
}
|
|
|
|
|
|
// 如果有品牌属性,添加到更新字符串
|
|
|
if (partAttrDTO.getBrand() != null) {
|
|
|
updateInfoBuilder.append(" ").append("brand").append(" ").append(partAttrDTO.getBrand());
|
|
|
}
|
|
|
|
|
|
String updateInfo = updateInfoBuilder.toString();
|
|
|
String[] updateInfoArray = {updateInfo};
|
|
|
LOGGER.info("调用JPO更新物料属性: " + updateInfo);
|
|
|
|
|
|
try {
|
|
|
String resultJson = JPO.invoke(context, "TMLMaintainMaterialPeptideAttr", null, "updatePartAttr", updateInfoArray, String.class);
|
|
|
return Response.status(Response.Status.OK).entity(resultJson).build();
|
|
|
} catch (MatrixException e) {
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private Response updatePeptideAttrs(HttpServletRequest request, PeptideUpdateRequest updateRequest) {
|
|
|
if(updateRequest == null || updateRequest.getProperties() == null) {
|
|
|
return Response.status(Response.Status.BAD_REQUEST).entity("Missing required properties").build();
|
|
|
}
|
|
|
|
|
|
matrix.db.Context context = this.getAuthenticatedContext(request, false);
|
|
|
List<PropertyDTO> properties = updateRequest.getProperties();
|
|
|
String itemId = updateRequest.getPartId() + " ";
|
|
|
String itemInfo = itemId;
|
|
|
for(PropertyDTO property : properties) {
|
|
|
itemInfo += property.getName() + " ";
|
|
|
itemInfo += property.getValue() + " ";
|
|
|
}
|
|
|
String updateInfo = "modify bus " + itemInfo;
|
|
|
|
|
|
String[] updateInfoArray = {updateInfo};
|
|
|
try {
|
|
|
String resultJson = JPO.invoke(context, "TMLMaintainMaterialPeptideAttr", null, "updatePeptideAttr", updateInfoArray, String.class);
|
|
|
return Response.status(Response.Status.OK).entity(resultJson).build();
|
|
|
} catch (MatrixException e) {
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private Response getPartPeptideAttr(HttpServletRequest request, String partCode) {
|
|
|
if (partCode == null || partCode.trim().isEmpty()) {
|
|
|
return createErrorResponse(400, "缺少 partCode 参数");
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
matrix.db.Context context = this.getAuthenticatedContext(request, false);
|
|
|
String[] partInfo;
|
|
|
if (partCode.contains("|")) {
|
|
|
partInfo = partCode.split("\\|");
|
|
|
} else {
|
|
|
partInfo = new String[]{partCode};
|
|
|
}
|
|
|
|
|
|
return executeQuery(context, partInfo);
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
return createErrorResponse(500, "认证失败: " + e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private Response executeQuery(matrix.db.Context context, String[] partInfo) {
|
|
|
try {
|
|
|
// 调用 JPO 方法,返回包装的JSON
|
|
|
String resultJson = JPO.invoke(context, "TMLMaintainMaterialPeptideAttr", null, "getPeptideAttrMap", partInfo, String.class);
|
|
|
|
|
|
// 直接返回JSON字符串
|
|
|
return Response.ok()
|
|
|
.entity(resultJson)
|
|
|
.type(MediaType.APPLICATION_JSON)
|
|
|
.build();
|
|
|
|
|
|
} catch (MatrixException e) {
|
|
|
return createErrorResponse(500, "JPO调用失败: " + e.getMessage());
|
|
|
} catch (Exception e) {
|
|
|
return createErrorResponse(500, "服务器错误: " + e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private Response createErrorResponse(int statusCode, String message) {
|
|
|
try {
|
|
|
JSONObject errorResponse = new JSONObject();
|
|
|
errorResponse.put("success", false);
|
|
|
errorResponse.put("code", statusCode);
|
|
|
errorResponse.put("message", message);
|
|
|
errorResponse.put("data", new JSONArray());
|
|
|
errorResponse.put("timestamp", System.currentTimeMillis());
|
|
|
|
|
|
return Response.status(statusCode)
|
|
|
.entity(errorResponse.toString())
|
|
|
.type(MediaType.APPLICATION_JSON)
|
|
|
.build();
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
// 如果JSON创建失败,返回简单文本
|
|
|
return Response.status(500)
|
|
|
.entity("{\"error\":\"Internal server error\"}")
|
|
|
.type(MediaType.APPLICATION_JSON)
|
|
|
.build();
|
|
|
}
|
|
|
}
|
|
|
} |